MySQL建立外鍵可能會(huì)失敗,具體原因如下:
1. 數(shù)據(jù)類型不一致
CREATE TABLE user( id INT PRIMARY KEY, name VARCHAR(20) ); CREATE TABLE order( id INT PRIMARY KEY, user_id INT, FOREIGN KEY (user_id) REFERENCES user(id) );
在上面的例子中,order表的user_id字段引用了user表的id字段。但是,MySQL無法將order表的user_id字段的數(shù)據(jù)類型轉(zhuǎn)換為user表的id字段的數(shù)據(jù)類型,因此外鍵建立失敗。
2. 父表字段不是主鍵或唯一鍵
CREATE TABLE user( id INT, name VARCHAR(20) ); CREATE TABLE order( id INT PRIMARY KEY, user_id INT, FOREIGN KEY (user_id) REFERENCES user(id) );
在上面的例子中,user表的id字段不是主鍵或唯一鍵,因此MySQL無法為其創(chuàng)建索引,從而無法作為order表的外鍵參照。
3. 存在重復(fù)值
CREATE TABLE user( id INT PRIMARY KEY, name VARCHAR(20) ); CREATE TABLE order( id INT PRIMARY KEY, user_id INT, FOREIGN KEY (user_id) REFERENCES user(id) ); INSERT INTO user(id, name) VALUES(1, 'Alice'); INSERT INTO user(id, name) VALUES(2, 'Bob'); INSERT INTO user(id, name) VALUES(2, 'Charlie');
在上面的例子中,user表中有兩個(gè)id為2的記錄,因此在為order表的user_id字段建立外鍵時(shí)會(huì)失敗。
通過避免上述問題,我們可以成功地建立外鍵。當(dāng)然,如果需要在上述情況下建立外鍵,可以嘗試使用約束名、修改字段數(shù)據(jù)類型、創(chuàng)建索引等方法解決問題。