產生這個錯誤的多數原因有一下兩點:
1,兩張表里要設主鍵和外鍵的字段的數據類型或者數據長度不一樣 (例如這個是int 另外一個是tinyint,或者都是int,但是設置的長度不同)
2,某個表里已經有記錄了
3、兩個表的引擎不一樣,查看表的引擎語句:
show table status from 數據庫名 where name='表名';
4、要設置外鍵的字段不能為主鍵
5、改建所參考的字段必須為主鍵
6、兩個字段必須具有相同的數據類型和約束
我遇到的情況就是4、5。后面關聯的表的字段必須被設置為主鍵,才能關聯成功。