2012-05-21 41 views
-3

第一個表'A'由refid(主鍵),名稱,性別,年齡,狀態組成,第二個表'b'由refid(主鍵)和狀態名組成,當我在表中寫入查詢A引用B它不起作用,但它在我嘗試從表B 1)爲什麼我無法從表A訪問?我創建了兩個表,嘗試爲第二個創建外鍵,它不起作用,但是我能夠從第二個創建它時獲得爲什麼?

2)我想知道什麼是從A引用它和的B引用它的區別?

  ALTER TABLE A 
     ADD FOREIGN KEY (refId) 
     REFERENCES B(refId) 

     // it doesn't work 

     ALTER TABLE B 
     ADD FOREIGN KEY (refId) 
     REFERENCES A(refId) 

     // it works 

通過「不工作」,我的意思是我從外鍵的錯誤:

#1452 - Cannot add or update a child row: a foreign key constraint fails 
(testdrive.<result 2 when explaining filename '#sql-4b8_8d'>, CONSTRAINT 
#sql-4b8_8d_ibfk_1 FOREIGN KEY (refid) REFERENCES reserve (refid)) 
+3

「不工作」是不是一個解釋 – zerkms

+0

@zerkms我的意思是它不工作時,我是指從A,但是當我從b指向它,它的工作原理,我不知道指的表之間的差異B從A和B從B –

+0

仍然沒有解釋。什麼「它不工作......」意味着什麼? – zerkms

回答

1

你說,你得到一個

無法添加或更新子行:外鍵約束失敗

錯誤,當你有一個FK A.refidB.refid

ALTER TABLE A 
ADD FOREIGN KEY (refId) 
REFERENCES B(refId) 

外鍵使用維護參照完整性,所以如果你有一個FK從A.refidB.refid,那麼你就不能插入refid=XA,除非refid=X已經在B。該錯誤消息告訴你,你要插入(或更新)一個refidA不在B,例如:

insert into A (refid) values (1); 
insert into B (refid) values (1); 

如果顛倒了FK從B.refid指向A.refid然後上面的INSERT序列將起作用。或者,您可以反轉INSERT:

insert into B (refid) values (1); 
insert into A (refid) values (1); 

這樣外鍵不會被違反。

相關問題