2013-05-29 120 views
3

我是比較新的MySQL中的外鍵的使用,並希望對於他們一些幫助。外鍵:單字段引用多個字段(相同的表)

我的問題是我有一個表中包含多個列,其中兩個依賴於從另一個表的鍵。總體方案是這樣的,其中「A」和「B」的列顯示它們之間的關係:

Table 1 (a) 
Table 2 (a,b) 
Table 3 (a,b) <-- Table in question 

我有表3中的外鍵,將級聯更新和刪除表1.發生什麼,我我想要做的是在更改表2(在這種情況下a應該保持不變)的情況下,將更新和刪除將表3中的列b設置爲NULL。有沒有辦法使用外鍵來建立這種關係?使用觸發器(以前從未使用過)會更好嗎?

預先感謝您!

編輯:爲了進一步闡明,表2具有a和b作爲其主鍵和改變表2將導致在表3b中,以反映這些變化。

爲例:

Table 1: 
a 
1 
2 
Table 2: 
a b 
1 1 
1 2 
2 1 
2 2 
Table 3: 
a b 
1 1 
2 1 
2 2 

從表2中刪除行1目前導致:

Table 1: 
a 
1 
2 
Table 2: 
a b 
1 2 
2 1 
2 2 
Table 3: 
a b 
1 NULL 
2 NULL 
2 2 

我想是:

Table 1: 
a 
1 
2 
Table 2: 
a b 
1 2 
2 1 
2 2 
Table 3: 
a b 
1 NULL 
2 1 
2 2 

回答

0

外鍵也可以被定義與SET NULL(而不是ON CASCADE),您可以混合使用這些定義。例如:

CREATE TABLE Table3 (
    a INT, 
    b INT NULL, 
    FOREIGN KEY (a) REFERENCES Table1(a) 
     ON DELETE CASCADE ON UPDATE CASCADE, 
    FOREIGN KEY (b) REFERENCES Table2(b) 
     ON DELETE SET NULL ON UPDATE SET NULL 
) 
+0

對不起,我應該已經更清楚了。這是我原來有,但問題是,表3的B柱都被設置爲NULL,但我需要在表2中的變化(有A和B作爲其主鍵),以反映其在表3中的變化。換句話說,當表2中的行被刪除時,只有與表2的主鍵匹配的行纔會受到影響。 – Jason

+0

我真的很感謝你的幫助,並更新了我的問題,希望爲我的問題提供足夠的信息。對不起,第一次不清楚。 – Jason

+0

@Jason好吧,那麼我相信你會需要一個觸發器。然而這個用例很奇怪,你能解釋一下你的表格及其關係的含義嗎?我懷疑你的結構可以優化。 – RandomSeed

相關問題