【问题标题】:"Duplicate entry" even though the column has UNIQUE constraint“重复条目”即使该列具有 UNIQUE 约束
【发布时间】:2021-04-17 14:34:11
【问题描述】:

我正在尝试删除表中不再使用的一些列。我有一个带有 UNIQUE 约束的列。当我尝试删除这些列时,我发现此列的“重复条目”。

当我使用此代码搜索行时,我只返回一个结果,但我认为这可能是因为它在找到第一个结果时停止查找(因为它认为它是唯一的)。

我已尝试删除有问题的行,但在尝试删除列后,我返回一个新代码“重复条目”。

尝试删除列时出错:

ALTER TABLE attacktable DROP COLUMN fairfightparsed, DROP COLUMN defenderbattlestatssum, DROP COLUMN attackerbsstd, DROP COLUMN defenderdsstd, DROP COLUMN defenderlevel;
ERROR 1062 (23000): Duplicate entry 'e3cce98b6aa8085ed6a960d2afcd4dca' for key 'attacktable.attackcode'

只有一个选定的攻击代码:

SELECT * FROM attacktable WHERE attackcode = "e3cce98b6aa8085ed6a960d2afcd4dca";
+----------------------------------+------------+ ...
| attackcode                       | attackerid | ...
+----------------------------------+------------+ ...
| e3cce98b6aa8085ed6a960d2afcd4dca |    2618403 | ...
+----------------------------------+------------+ ...
1 row in set (0,00 sec)

唯一性描述:

describe attacktable;
+------------------------+--------------+------+-----+---------+-------+
| Field                  | Type         | Null | Key | Default | Extra |
+------------------------+--------------+------+-----+---------+-------+
| attackcode             | varchar(255) | YES  | UNI | NULL    |       |
| attackerid             | int          | YES  | MUL | NULL    |       |
....

表上的索引:

SHOW INDEX FROM attacktable;
+-------------+------------+------------------------+--------------+------------------------+-----------+-------------+----------+--------+------+------------+---------+---------------+---------+------------+
| Table       | Non_unique | Key_name               | Seq_in_index | Column_name            | Collation | Cardinality | Sub_part | Packed | Null | Index_type | Comment | Index_comment | Visible | Expression |
+-------------+------------+------------------------+--------------+------------------------+-----------+-------------+----------+--------+------+------------+---------+---------------+---------+------------+
| attacktable |          0 | attackcode             |            1 | attackcode             | A         |     1022111 |     NULL |   NULL | YES  | BTREE      |         |               | YES     | NULL       |
| attacktable |          1 | attackerid             |            1 | attackerid             | A         |        2281 |     NULL |   NULL | YES  | BTREE      |         |               | YES     | NULL       |
| attacktable |          1 | resmodchain            |            1 | resmodchain            | A         |          92 |     NULL |   NULL | YES  | BTREE      |         |               | YES     | NULL       |
| attacktable |          1 | resmodfair             |            1 | resmodfair             | A         |         202 |     NULL |   NULL | YES  | BTREE      |         |               | YES     | NULL       |
| attacktable |          1 | resmodwar              |            1 | resmodwar              | A         |           1 |     NULL |   NULL | YES  | BTREE      |         |               | YES     | NULL       |
| attacktable |          1 | attackerbattlestatssum |            1 | attackerbattlestatssum | A         |       76782 |     NULL |   NULL | YES  | BTREE      |         |               | YES     | NULL       |
+-------------+------------+------------------------+--------------+------------------------+-----------+-------------+----------+--------+------+------------+---------+---------------+---------+------------+

我现在担心我的表中有很多这样的重复项。请帮助:)

编辑:所以我怀疑错误代码是错误的,而不是我有重复。我猜这样会更容易。

DELETE FROM attacktable WHERE attackcode = "e3cce98b6aa8085ed6a960d2afcd4dca";
Query OK, 1 row affected (0,02 sec)
SELECT * FROM attacktable WHERE attackcode = "e3cce98b6aa8085ed6a960d2afcd4dca";
Empty set (0,00 sec)

【问题讨论】:

  • 您尝试删除部分主键的列吗?
  • 没有。我正在尝试删除不同的列。主键是单列(唯一的攻击代码)。编辑:对不起。表中没有主键。我应该将其添加到唯一的“攻击代码”中吗?
  • '我怀疑错误代码是错误的' - 我不会让你尝试而不是 =
  • 嗯.. 我会在哪里使用这个?我现在遇到了攻击代码“dc7246b27a7dce417a92828a69e71019”的错误。如果SELECT * WHERE attackcode like "dc7246b27a7dce417a92828a69e71019" 我仍然只得到一行。

标签: mysql


【解决方案1】:

找到this thread后解决。

在我的情况下,这是由于我在尝试删除列时继续写入表造成的。我锁定了表格,删除了列并再次解锁了表格。

LOCK TABLE attacktable WRITE;

ALTER TABLE DROP COLUMN ...;

UNLOCK TABLES

【讨论】:

    猜你喜欢
    • 2010-12-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多