插入哪个唯一键?

时间:2009-09-28 08:59:57

标签: mysql mysql-error-1062

使用MySQL,当我有一个表(例如)三个键(一个主键,自动增量和列上的两个唯一键,例如''code'和'name')时,我怎么能(有效地)知道在插入时违反了哪个唯一性约束?

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

我们与多个开发人员一起开发这个应用程序,我想阻止我们不按相同顺序向表添加约束的那一天,所以我机器上的第二个键是另一台机器上的第三个键,副-versa。

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

2 个答案:

答案 0 :(得分:1)

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

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';

虽然不是一个非常优雅的解决方案。

答案 1 :(得分:0)

也许这会有所帮助:

SHOW INDEX FROM arbeit

巴比