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 这个外键键名和另一个表中的外键键名重复了。。

因为外键键名起名太随意了,没有严格的命名规则导致重复键名出现。

总结:

以后给键命名,必须遵循以下规则:

键类型_表名缩写_键名缩写 例如: FK_Corporate_Coupon_Page_Id

Built with Hugo
主题 StackJimmy 设计