【问题标题】:1062 Error (duplicate entry) with `ALTER IGNORE TABLE ADD PRIMARY KEY` query1062 错误(重复条目)与 `ALTER IGNORE TABLE ADD PRIMARY KEY` 查询
【发布时间】: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


【解决方案1】:

看起来我查看了错误的文档。我查看了 5.1 版本的文档,我有 5.5 版本的 MySQL 服务器。

right docs中提到:

所以我需要考虑使用建议的SET SESSION old_alter_table=1 或找到另一种方法从表中删除多余的行。

【讨论】:

猜你喜欢
  • 2016-04-26
  • 2015-02-14
  • 2015-04-26
  • 2014-02-02
  • 1970-01-01
  • 2020-02-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多