2011-07-23 27 views
2

我正在使用Mysql。我有兩張彼此一一對應的表格。如何在數據庫中執行一對一的關係插入

換句話說,它們都有一個引用另一個表的主鍵的外鍵約束。

如果我嘗試爲每個表插入一條記錄,其中每條記錄引用另一條記錄。 like:

由於存在一對一的外鍵約束,Mysql數據庫將阻止這種操作。

這就像雞蛋問題。

但是,我注意到在Java Hibernate中,這種操作可以在兩個實體類是一對一相關的情況下完成。

這怎麼能在Hibernate中完成,因爲我注意到兩個插入(來自Hibernate調試消息)按照我所做的分開。所以沒有什麼特別的。

或者如何強制插入一條記錄,即使它應該引用的記錄尚不存在?

+1

循環外鍵約束是什麼原因?這可能意味着一個糟糕的設計。 – Mike

+0

我認爲我也面臨類似的問題。任何針對此問題的解決方案,請發佈。 TIA – user883769

+0

這是一個很好的問題,讓我想知道。下面的sudmong的答案很可能是如何用ORM框架完成的。 –

回答

3

將所引用的一列空值,參考列也允許空values.Later一旦你在引用的列插入記錄,您可以更新列。

+0

其實我注意到冬眠做了和你所建議的一樣的東西,sudmong。 – xiaohan2012

1

您可以嘗試通過在兩個插入查詢之前立即運行SET foreign_key_checks = 0來禁用外鍵檢查,並在查詢之後立即啓用通過執行SET foreign_key_checks = 1執行外鍵檢查。

有關foreign key constraints的更多信息:

mysql > SET foreign_key_checks = 0; 
mysql > INSERT INTO t1 (t2_id) VALUES (1); 
mysql > INSERT INTO t2 (t1_id) VALUES (1); 
mysql > SET foreign_key_checks = 1; 
+1

禁用外鍵約束通常是一個非常糟糕的主意。如果你確實這樣做了,那麼至少把整件事都放在一個交易中。 – Mike

+0

當然,你應該在交易中運行它。但我沒有看到任何其他方式來實現所需的不禁用外鍵檢查... – mAu

+0

我注意到另一個問題。 – xiaohan2012

相關問題