[MySQL] ERROR 1022 (23000): Can’t write; duplicate key in table …

在给一个表添加外键时,出现:

1
ERROR 1022 (23000): Can't write; duplicate key in table ...

产生上述错误的SQL是:

1
2
3
4
5
6
7
8
9
10
CREATE TABLE corporate_coupon (
    id  INT UNSIGNED NOT NULL AUTO_INCREMENT ,
    coupon_id  INT UNSIGNED NOT NULL ,
    page_id  INT UNSIGNED NOT NULL ,
    corporate_customer_id  INT NOT NULL ,
    PRIMARY KEY (id),
    CONSTRAINT Corporate_Coupon_Id FOREIGN KEY (coupon_id) REFERENCES salesrule_coupon (coupon_id) ON DELETE CASCADE ON UPDATE CASCADE,
    CONSTRAINT Corporate_Page_Id FOREIGN KEY (page_id) REFERENCES corporate_page (id) ON DELETE CASCADE ON UPDATE CASCADE,
    CONSTRAINT Corporate_Customer_Id FOREIGN KEY (corporate_customer_id) REFERENCES corporate_customer (id) ON DELETE CASCADE ON UPDATE CASCADE
);

后来发现,是 Corporate_Page_Id 这个外键键名和另一个表中的外键键名重复了。。
因为外键键名起名太随意了,没有严格的命名规则导致重复键名出现。

经验总结:以后给键命名,必须遵循以下规则:

1
键类型_表名缩写_键名缩写

例如:

1
FK_Corporate_Coupon_Page_Id