簡體   English   中英

如何在 mysql 中使用刪除級聯?

[英]How do I use on delete cascade in mysql?

我有一個組件數據庫。 每個組件都屬於特定類型。 這意味着組件和類型之間存在多對一的關系。 當我刪除一個類型時,我想刪除所有具有該類型外鍵的組件。 但是如果我沒記錯的話,級聯刪除會在刪除組件時刪除類型。 有什么辦法可以做到我所描述的嗎?

這是您要包含在組件表中的內容。

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 存儲引擎不支持外鍵。

使用這個 sql

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

您必須將外鍵約束定義為 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
)
Step 1. Create the buildings table:

CREATE TABLE buildings (
  building_no INT PRIMARY KEY AUTO_INCREMENT,
  building_name VARCHAR(255) NOT NULL,
  address VARCHAR(255) NOT NULL
);

Step 2. Create the rooms table:

CREATE TABLE rooms (
  room_no INT PRIMARY KEY AUTO_INCREMENT,
  room_name VARCHAR(255) NOT NULL,
  building_no INT NOT NULL,
  FOREIGN KEY (building_no)
    REFERENCES buildings (building_no)
    ON DELETE CASCADE
);

Notice that the ON DELETE CASCADE  clause at the end of the foreign key constraint 
definition.

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM