这个版本适用于较早的mysql版本,但这个查询的好处是它将删除重复项和相同时间的添加索引,如何在mysql 8商业版中这样做?
ALTER IGNORE TABLE tablex
ADD UNIQUE INDEX id_rmd (field1,field12, field3);
SQL错误1064:您的SQL语法出现错误;请检查与MySQL服务器版本对应的手册,以获得使用“忽略表”的正确语法.
我如何在mysql 8广告中做同样的事情。即在创建索引的同时删除重复
发布于 2021-12-02 19:09:58
商业或非商业并没有什么区别。INSERT IGNORE
在5.6中被否决,5.7被删除:
https://dev.mysql.com/doc/refman/5.6/en/alter-table.html
忽略是标准SQL的MySQL扩展。它控制ALTER的工作方式,如果新表中的唯一键上有重复项,或者启用严格模式时会出现警告。如果未指定忽略,则在发生重复键错误时,该副本将被中止并回滚.如果指定了“忽略”,则只有一行用于唯一键上有重复项的行。其他冲突的行将被删除。不正确的值被截断到最接近匹配的可接受值。
从MySQL 5.6.17开始,忽略子句被废弃,它的使用将生成一个警告。忽略在MySQL 5.7中被删除。
您只需重命名并复制表(未经测试):
create tablex_new like tablex;
ALTER TABLE tablex_new
ADD UNIQUE INDEX id_rmd (field1,field12, field3);
insert ignore into tablex_new select * from tablex;
rename table tablex to tablex_old, tablex_new to tablex;
-- after verifying success
drop table tablex_old;
(请注意,在insert ignore
启动和重命名完成之间发生的任何插入/更新/删除都将丢失。)
https://stackoverflow.com/questions/70205129
复制相似问题