2009-02-04 19 views
33

我有一個組件數據庫。每個組件都是特定的類型。這意味着組件和類型之間存在多對一的關係。當我刪除一個類型時,我想刪除所有具有該類型外鍵的組件。但是如果我沒有弄錯,級聯刪除將刪除該組件時刪除的類型。有什麼辦法可以做我描述的嗎?如何在mysql中刪除級聯使用?

回答

53

以下是您在組件表中包含的內容。

CREATE TABLE `components` (
    `id` int(10) unsigned NOT NULL auto_increment, 
    `typeId` int(10) unsigned NOT NULL, 
    `moreInfo` VARCHAR(32), 
    -- etc 
    PRIMARY KEY (`id`), 
    KEY `type` (`typeId`) 
    CONSTRAINT `myForeignKey` FOREIGN KEY (`typeId`) 
     REFERENCES `types` (`id`) ON DELETE CASCADE ON UPDATE CASCADE 
) 

請記住,您需要使用InnoDB存儲引擎:默認的MyISAM存儲引擎不支持外鍵。

+5

NB,ON UPDATE CASCADE可能是一個好主意,如果你使用它來鏈接一個主鍵,因爲它應該是不可變的,依靠這個建議數據庫可能需要重新設計,但我想如果你用一個唯一但不是主鍵的外鍵連接它,那就沒關係。 – ThinkBonobo 2013-12-28 03:09:56

1

您必須將您的外鍵約束定義爲ON DELETE CASCADE。

說明:您需要使用InnoDB存儲引擎,他默認的MyISAM存儲引擎不支持外鍵關係。

CREATE TABLE `table2` (
`id` int(11) NOT NULL auto_increment, 
`name` int(11) NOT NULL, 

PRIMARY KEY (`id`), 
KEY `ids` (`ids`) 
CONSTRAINT `foreign` FOREIGN KEY (`ids`) 
    REFERENCES `table2` (`ids`) ON DELETE CASCADE ON UPDATE CASCADE 
) 
1

使用此SQL

DELETE T1,T2 FROM T1 INNER JOIN T2 ON T1.key = T2.key WHERE條件

+0

按照操作要求,這不使用`CASCADE`功能。 – displayname 2016-08-02 14:58:04