【发布时间】:2015-07-23 10:18:00
【问题描述】:
据我从 DOC 和 other questions 得知,这样的查询应该默默地删除带有重复 id 的行。但是 MySQL 会抛出错误:
这是 phpmyadmin 的输出。
为什么 MySQL 没有删除重复 id 的行?有什么想法吗?
【问题讨论】:
-
您尝试过解决方法吗?
ALTER IGNORE TABLE cards ADD PRIMARY KEY(id) ORDER BY id DESC;... ? -
@Michael-sqlbot 刚刚按照您的建议进行了尝试。不幸的是,它导致
#1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'ORDER BY id DESC' at line 1。另外请看我的回答,因为我似乎找到了错误的原因。 -
我的错误。我省略了一个逗号。
...KEY(id), ORDER BY...应该可以工作,因为它会混淆服务器以隐式使用“较旧的更改表”逻辑。 InnoDB 表实际上不能像这样重新排序,但是服务器在意识到这一点之前做了必要的准备,切换到一个不同的机制来改变表,然后只是设置一个警告,表明 order by 被忽略(但其余的,如要求)。这似乎是最终做你在答案中完成的同样事情的间接方式。
标签: mysql indexing primary-key alter-table