2010-11-23 17 views
1

我是一個MySQL的noob的一點,所以請忍受我,我試圖找到一種方法來保留在Parent Table東西,並要求至少有一個子表有一個外鍵與它並列。希望一個例子是有道理的。MySQL保留數據,直到沒有子表格附加

      Parent Table 
         ------------ 
         theId int 
         someValue varchar(20) 
        /  |   \ 
        /  |    \ 
        /  |    \ 
Open Table  / Completed Table  \ Monitoring Table 
------------------/ ------------------  ------------------ 
childTableId int   childTableId int  childTableId int 
someOtherData blob  someOtherData blob  someOtherData blob 
theId int (fk)   theId int (fk)   theId int(fk) 

我有3組孩子的數據的所有跟蹤不同的事情,這些記錄是隻存在於一定的時間,但是父表總是在所有階段一樣。我需要一種方法來確保如果子數據是引用父表的唯一子表(可能有2個),則無法刪除子數據。

幫助?

+0

將計數器保存在父表中,並在添加和刪除子行時對它們進行加/減? TBH我不明白你的問題:P – 2010-11-23 15:37:54

回答

1

根據事件(開,竣工,監控),您將調用其中之一:

DELETE FROM Open 
WHERE theId = 'yourId' 
AND theId IN 
    (SELECT theId FROM Completed) UNION ALL 
    (SELECT theId FROM Monitoring); 

DELETE FROM Completed 
WHERE theId = 'yourId' 
AND theId IN 
    (SELECT theId FROM Open) UNION ALL 
    (SELECT theId FROM Monitoring); 

DELETE FROM Monitoring 
WHERE theId = 'yourId' 
AND theId IN 
    (SELECT theId FROM Open) UNION ALL 
    (SELECT theId FROM Completed); 

如果相同的theId在另一張表中發現這隻會刪除記錄。你必須在一個事務中運行這個。否則,多個用戶可能會同時在不同的表中刪除相同的theId記錄。

+0

所以我只需要修改選擇語句來添加`WHERE theId = 1`或其他什麼,因爲我想刪除選擇的行而不是所有的行? – 2010-11-23 15:32:36

相關問題