2010-09-28 70 views
1

我想實現一種XOR約束在MySQL的外鍵5.1XOR約束在MySQL

有這個表,假設實體,可以參考兩種不同valuesets由表腐爛和代表ValsB。現在我想實現一個約束,以確保這兩個中的一個被映射,另一個不是。

在Oracle中,你可以使用類似

CHECK (NVL2(FK_A,1,0)+NVL2(FK_B,1,0)=1)); 

但據我瞭解的MySQL真的不支持CHECK約束(還)。

任何想法?

+0

我不明白爲什麼你會不會有更清晰實現它:'CHECK((FK_A IS NULL和FK_B IS NOT NULL)OR(FK_A IS NOT NULL和FK_B IS NULL))'; – 2010-09-28 14:57:18

+0

是的,你是對的。你的陳述更具可讀性。但仍然不會幫助我。但是我會在我們的oracle應用程序中使用你的建議。 ty – 2010-09-28 15:48:00

回答

2

正確的。 MySQL不支持檢查限制。 CHECK子句被解析,但被所有存儲引擎忽略。

你不得不強制在客戶端的XOR條件。

+0

好的謝謝。我希望有一個奇特的替代方式來實現這一點在數據庫方面。我擔心的是,如果一個未來的程序員只會涉及db層,他可能會監督這個邏輯。例如通過編寫一個導入腳本。 – 2010-09-28 16:11:03