1

使用 MySQL,当我有一个具有(例如)三个键(一个主键、自动增量和列上的两个唯一键,例如“代码”和“名称”)的表时,我如何(有效地)知道哪个唯一性插入时违反了约束?

您收到错误消息#1062 - Duplicate entry 'Value' for key 2,但我怎么知道键 2 是“代码”列而不是“名称”列的键?

我们与多个开发人员一起开发此应用程序,并且我想防止有一天我们不按相同顺序将约束添加到表中,因此我机器上的第二个键是另一台机器上的第三个键,反之亦然。

映射到所涉及的确切列名并不是必需的,只需映射到键名就足够了。

4

2 回答 2

1

正如 Bobby 所建议的,SHOW 索引返回一个带有相关键索引的结果集,查看此页面以获取更多示例:

SHOW INDEXES FROM products_to_categories
WHERE Key_name = "PRIMARY"
AND Seq_in_index = '2';

+------------------------+------------+----------+--------------+-------------+-----------+-------------+----------+--------+------+------------+---------+
| Table                  | Non_unique | Key_name | Seq_in_index | Column_name | Collation | Cardinality | Sub_part | Packed | Null | Index_type | Comment |
+------------------------+------------+----------+--------------+-------------+-----------+-------------+----------+--------+------+------------+---------+
| products_to_categories |          0 | PRIMARY  |            2 | category_id | A         |           0 |     NULL | NULL   |      | BTREE      |         |
+------------------------+------------+----------+--------------+-------------+-----------+-------------+----------+--------+------+------------+---------+

但是,如果不超过以下解决方法,这可能需要尽可能多的代码。

检查您插入的哪个值与表中的现有行冲突:

SELECT code FROM myTable WHERE code = 'the_value_you_tried_to_insert';

或者

SELECT name FROM myTable WHERE name = 'the_value_you_tried_to_insert';

尽管不是一个非常优雅的解决方案。

于 2009-09-28T09:04:03.407 回答
0

也许这有帮助:

SHOW INDEX FROM arbeit

鲍比

于 2009-09-28T09:14:07.863 回答