2013-08-26 87 views
-4

例如,如果我創建以下數據庫表的佈局:創建一個與數據intregrety一對多的關係

CREATE TABLE IF NOT EXISTS Users_parent (
ID int(255) NOT NULL AUTO_INCREMENT, 
Username text NOT NULL, 
Password text NOT NULL 
)ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=1; 

CREATE TABLE IF NOT EXISTS Users_Child (
ID int(255) NOT NULL AUTO_INCREMENT, 
Firstname varchar(255) NOT NULL, 
SecondName varchar(255) NOT NULL, 
UserID int(255) NOT NULL, 

)ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=1; 

CREATE TABLE IF NOT EXISTS Users_OtherChild (
ID int(255) NOT NULL AUTO_INCREMENT, 
Warnings text NOT NULL, 
UserID text NOT NULL 
)ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=1; 

從閱讀,UserID將是外鍵建立一個一對多的關係與所有的其他相關表中的相關表。

我明白這是在MySQL數據庫內的存儲過程中運行的,但是如何刪除父表中的行刪除,直到刪除所有子表,這樣就不會有與父級關聯的子級信息?

+0

您是否正在尋找父表中刪除,使級聯的子表中刪除?或者你是否想要停止刪除父母? (這個實現在很大程度上取決於這個答案) –

+0

@Declan_K防止刪除父行,直到所有的子表都沒有任何關聯的數據 –

+0

對不起,這並不回答問題(可能是因爲我沒有不會問得很好)。當您說「直到所有子表都清除了任何關聯數據」時,您是否希望刪除相關日期以便在後臺自動發生,或者您是否希望提醒用戶存在關聯日期並停止父級刪除? –

回答

1

爲了傳播完成從父表中刪除到你需要實現外鍵與ON DELETE CASCADE選項的子表。

強制執行級聯的詳細的解釋請參見here會刪除

1

該外鍵將阻止任何父表中的行(帶有id)被刪除,同時在任何引用父表的表中有一個子元素(如在通過userid字段引用它的行中)。

問題是:爲什麼要刪除子表?在我看來你的例子中不需要它。只要任何孩子留在該表中,參考文獻就會保留。

使用如何創建一個外鍵MySQL的文檔:

http://dev.mysql.com/doc/refman/5.6/en/innodb-foreign-key-constraints.html

相關問題