2017-04-21 139 views
-1

在我的MySQL數據庫我有兩個表的審查和產品MySQL錯誤無法添加當我添加外鍵約束外鍵

mysql> desc review; 
+---------------+--------------+------+-----+-------------------+----------------+ 
| Field   | Type   | Null | Key | Default   | Extra   | 
+---------------+--------------+------+-----+-------------------+----------------+ 
| id   | int(11)  | NO | PRI | NULL    | auto_increment | 
| review  | varchar(255) | YES |  | NULL    |    | 
| rating  | varchar(255) | YES |  | NULL    |    | 
| created_at | timestamp | NO |  | CURRENT_TIMESTAMP |    | 
| updated_at | timestamp | NO |  | CURRENT_TIMESTAMP |    | 
| reviewer_name | varchar(255) | YES |  | NULL    |    | 
| product_id | int(11)  | YES |  | NULL    |    | 
+---------------+--------------+------+-----+-------------------+----------------+ 

mysql> desc products; 
+---------+------------------+------+-----+---------+----------------+ 
| Field | Type    | Null | Key | Default | Extra   | 
+---------+------------------+------+-----+---------+----------------+ 
| id  | int(10) unsigned | NO | PRI | NULL | auto_increment | 
| name | varchar(255)  | NO |  | NULL |    | 
| details | text    | NO |  | NULL |    | 
+---------+------------------+------+-----+---------+----------------+ 
3 rows in set (0.00 sec) 

當我試圖在審查表作爲外鍵的product_id引用ID在產品表,我發現這個錯誤,什麼我給查詢是:

mysql> ALTER TABLE review ADD FOREIGN KEY (product_id) REFERENCES products(id); 
ERROR 1215 (HY000): Cannot add foreign key constraint 

請大家幫我出了什麼問題,我怎麼能弄清楚

+0

可能和int 11 – GurV

+0

所以我想現在要做的是 – Karthiga

+0

我改變了它正常工作。謝謝 – Karthiga

回答

1

可能有兩個意圖兒子的錯誤。

數據類型的精度是不同的兩列,即

products -> id | int(10) unsigned // here int(10) 
product_id  | int(11)   // here int(11) 

使精度同樣通過修改表結構

要建立外鍵關係船父表列必須 唯一或主列。

因此,檢查products(id)是主要的還是唯一的,如果不是主要的或唯一的。

+0

我插入評論(評論,評級,評論員名稱,產品ID)值('產品很好','4','約翰德奧','1');當我嘗試在評論表中插入值時需要另一個幫助。 錯誤1452(23000):無法添加或更新子行:外鍵約束失敗('birdys_dev'。''review',CONSTRAINT'review_ibfk_1' FOREIGN KEY('product_id')REFERENCES'products'('id')) ' – Karthiga

+0

您能否幫我 – Karthiga

+1

有了外鍵關係,您只能在子表中插入這些值已經出現在父表中的外鍵綁定列 –

2

int類型的「精度」意味着什麼。這只是顯示寬度的提示。它對數據類型的大小沒有影響。

是什麼原因造成的錯誤是你的products.idint unsigned,但你想申報review.product_id一個外鍵這是int(簽字)。

signed和unsigned int之間的區別是數據類型與參照完整性不兼容。你可以做一個int(10) unsigned和其他int(327) unsigned,它會沒事的。

+0

好的回答.... –

0

改變你的表結構

ID | INT(11)

或設置

PRODUCT_ID | int(10)unsigned

做哪種方式是你的麪糊。同時你也可以由於INT 10之間的數據類型不匹配的精度得到更好的瞭解有關FOREIGN KEY從here