代码之家  ›  专栏  ›  技术社区  ›  Jan Fabry

用插入键点击哪个唯一键?

  •  0
  • Jan Fabry  · 技术社区  · 16 年前

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

    你会得到一个错误 #1062 - Duplicate entry 'Value' for key 2 但我怎么知道键2是“代码”列的键而不是“名称”列的键?

    我们与多个开发人员一起开发这个应用程序,我希望防止有一天我们不按相同的顺序向表添加约束,所以我的机器上的第二个键是另一台机器上的第三个键,反之亦然。

    映射到所涉及的确切列名称并非真正必要,只需映射到键名称就足够了。

    2 回复  |  直到 15 年前
        1
  •  1
  •   Yannick Motton    16 年前

    正如bobby所建议的,show indexes返回一个带有相关键索引的结果集,检查这个 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';
    

    虽然不是很优雅的解决方案。

        2
  •  0
  •   bobby    16 年前

    也许这有助于:

    SHOW INDEX FROM arbeit
    

    鲍比

    推荐文章