SQL错误[1064][42000]:在mysql 8上使用ALTER IGNORE TABLE时,SQL语法出现错误



这个查询在旧的mysql版本中有效,但这个查询的好处是它可以删除重复项,同时添加索引,我如何在mysql 8商业中做到这一点

ALTER IGNORE TABLE tablex
ADD UNIQUE INDEX id_rmd (field1,field12, field3);

SQL错误[1064][42000]:您的SQL语法有错误;请查看与MySQL服务器版本相对应的手册,了解在"IGNORE TABLE…"附近使用的正确语法。。。

我如何在mysql8商业版中做到这一点。即删除重复,同时创建索引

商业与否没有区别。INSERT IGNORE在5.6中被弃用,在5.7中被删除:

https://dev.mysql.com/doc/refman/5.6/en/alter-table.html:

IGNORE是标准SQL的MySQL扩展。如果新表中的唯一键重复,或者在启用严格模式时出现警告,它控制ALTER TABLE的工作方式。如果未指定IGNORE,则复制将中止,并在出现重复密钥错误时回滚。如果指定了IGNORE,则在唯一键上具有重复项的行中,只使用一行。其他冲突的行将被删除。不正确的值将被截断为最接近匹配的可接受值。

从MySQL 5.6.17开始,IGNORE子句已被弃用,它的使用会产生警告。IGNORE在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启动和重命名完成之间发生的任何插入/更新/删除都将丢失。(

最新更新