2013-11-03 31 views
-1

我已經使用了不同的數據庫以及比我得到錯誤的表格還多的錯誤,但錯誤依然存在......使用alter命令添加外鍵到複合主鍵顯示錯誤1215

這裏有三個表:

表一:

create table a(q int,w int,primary key(q,w));//IMPORTANT:q then w 

q和w形成複合主鍵。

表B:

create table b(e int,r int); 

表3:

create table c(t int,y int); 

alter table b add foreign key(e) references a(q); 
Query OK, 0 rows affected (0.16 sec) 

該改變命令使Ë作爲外鍵表中的( '第一' 主鍵)的Q值。

如果我試圖讓其他屬性爲外鍵的第二主鍵即 'W',它顯示錯誤1215

alter table c add foreign key(t) references a(w); 

ERROR 1215(HY000):無法添加外鍵約束

爲什麼不能採取「T」的外鍵,即「W」「第二」的主鍵。 「我可以讓它們中的任何一個作爲第一個主鍵(q)的外鍵,但是它們都不能作爲第二個(w)」。

這可能會讓人困惑,但是當我在創建表格a時只通過改變(q,w)到(w,q)來刪除並創建所有'em時,w可以被其他人引用而不是a。

create table a(q int,w int,primary key(w,q)); 
alter table c add foreign key(t) references a(w); 
Query OK, 0 rows affected (0.16 sec) 

alter table b add foreign key(e) references a(q); 

ERROR 1215(HY000):無法添加外鍵約束

請幫我....花了整整一天的me..but我做不到找到它發生的原因...

+0

編輯你的文章,這樣的sql語句實際上可讀請... – Joe

+0

因此'alter table b添加外鍵(e)引用a(q);'實際上_valid syntax_,儘管'q'只是一個一個複合PK的一部分!我不得不測試它以確保我仍然不相信我的眼睛! _僅限於MySQL!_ :)) – geomagas

回答

-1

這是使用利用改變命令creted外鍵的圖像oracle_ express_11eg軟件。我真的在這裏做了兩個表名測試和學生。測試表由測試ID,名稱等組成,學生表又由ID,名稱等組成,並在兩個表中使用命令「主鍵(id)」命名主鍵,然後編寫命令「alter table test ,添加外鍵(id),引用學生(id);「創造外鍵,不是那麼簡單嗎?