在给一个表添加外键时,出现:
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 |