【发布时间】: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