報錯緣由1: 主鍵與外鍵的字符類型不匹配sql
首先建立兩張以下的表而後執行,發現two表建立失敗,檢查以後分析緣由得出是由於主鍵與外鍵的字符類型不匹配,one表的id是int類型,two表的tid是char(10)類型,這時只要改成一致的字符類型就解決問題了。
若是發現本身建立的表,主鍵外鍵字符類型同樣,那就考慮其它可能,請接着看。數據庫
create table one( id int primary key, oname VARCHAR(30) ); create table two( tid char(10), tname VARCHAR(30), constraint t_o_sk foreign key (tid) references one(id) on delete cascade on update cascade ##on delete cascade是級聯刪除,on update cascade 是級聯更新 );
報錯緣由2:主表的主鍵不是primary key
若是是的話,表又建立好了,那麼能夠用alter進行修改便可。
這種問題發現沒有解決問題的話,那可能下面的考慮第三種狀況了。ide
alter table one modify id int primary key;
報錯緣由3:檢查字符編碼是否一致編碼
報錯緣由4:找不到外鍵引用的列
列在增長外鍵的時候,可能已經存在數據了(歷史數據,或者更新數據庫表時設置的默認值),但這些數據並不必定能在外鍵關聯表中找到對應的行記錄。這種狀況也會致使外鍵建立失敗。code