日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > 数据库 >内容正文

数据库

mysql ondelete_MySQL on delete cascade语句

發布時間:2023/12/2 数据库 34 豆豆
生活随笔 收集整理的這篇文章主要介紹了 mysql ondelete_MySQL on delete cascade语句 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

在本教程中,您將學習如何使用MySQL ON DELETE CASCADE引用操作來執行外鍵從多個相關表中刪除數據。

在上一個教程中,我們學習了如何使用單個DELETE語句從一個或多個相關表中刪除數據。但是,MySQL提供了一種更為有效的方法,稱為ON DELETE CASCADE對于外鍵的引用操作,可以實現在從父表中刪除數據時自動刪除子表中的數據。

1. MySQL ON DELETE CASCADE示例

下面來看一些使用MySQL ON DELETE CASCADE的例子。

假設有兩張表:建筑物(buildings)和房間(rooms)。 在這個數據庫模型中,每個建筑物都有一個或多個房間。 然而,每個房間只屬于一個建筑物。沒有建筑物則房間是不會存在的。

建筑物和房間表之間的關系是一對多(1:N),如下面的數據庫圖所示:

當我們從buildings表中刪除一行時,還要刪除rooms表中引用建筑物表中行的行。 例如,當刪除建筑編號(building_no)為2的行記錄時,在buildings表上執行如下查詢:

DELETE FROM buildings

WHERE

building_no = 2;

我們希望rooms表中涉及到建筑物編號2的行記錄也將被刪除(講得通俗一點:假設2號樓倒塌了,那么2號樓的房間應該也就不存在了)。以下是演示MySQL ON DELETE CASCADE參考操作如何工作的步驟。

第一步, 創建buildings表,如下創建語句:

USE testdb;

CREATE TABLE buildings (

building_no INT PRIMARY KEY AUTO_INCREMENT,

building_name VARCHAR(255) NOT NULL,

address VARCHAR(255) NOT NULL

)ENGINE=InnoDB DEFAULT CHARSET=utf8;

第二步, 創建rooms表,如下創建語句:

USE testdb;

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

)ENGINE=InnoDB DEFAULT CHARSET=utf8;

請注意,在外鍵約束定義的末尾添加ON DELETE CASCADE子句。

第三步, 將一些數據插入到buildings表,如下插入語句:

INSERT INTO buildings(building_name,address)

VALUES('海南大廈','海口市國興大道1234號'),

('萬達水城','海口市大同路1200號');

第四步, 查詢buildings表中的數據:

mysql> select * from buildings;

+-------------+---------------+----------------------+

| building_no | building_name | address |

+-------------+---------------+----------------------+

| 1 | 海南大廈 | 海口市國興大道1234號 |

| 2 | 萬達水城 | 海口市大同路1200號 |

+-------------+---------------+----------------------+

2 rows in set

現在可以看到,在建筑物表中有兩行記錄。

第五步, 將一些數據插入到rooms表,如下插入語句:

INSERT INTO rooms(room_name,building_no)

VALUES('Amazon',1),

('War Room',1),

('Office of CEO',1),

('Marketing',2),

('Showroom',2);

第六步, 查詢rooms表中的數據:

mysql> select * from rooms;

+---------+---------------+-------------+

| room_no | room_name | building_no |

+---------+---------------+-------------+

| 1 | Amazon | 1 |

| 2 | War Room | 1 |

| 3 | Office of CEO | 1 |

| 4 | Marketing | 2 |

| 5 | Showroom | 2 |

+---------+---------------+-------------+

5 rows in set

從上面行記錄中可以看到,building_no=1的建筑有3個房間,以及building_no=2有2個房間。

第七步, 刪除編號為2的建筑物:

DELETE FROM buildings WHERE building_no = 2;

第八步, 查詢 rooms表中的數據 -

mysql> DELETE FROM buildings WHERE building_no = 2;

Query OK, 1 row affected

mysql> SELECT * FROM rooms;

+---------+---------------+-------------+

| room_no | room_name | building_no |

+---------+---------------+-------------+

| 1 | Amazon | 1 |

| 2 | War Room | 1 |

| 3 | Office of CEO | 1 |

+---------+---------------+-------------+

3 rows in set

可以看到,表中只剩下引用building_no=1的記錄了,引用building_no=2的所有行記錄都被自動刪除了。

請注意,ON DELETE CASCADE僅支持使用存儲引擎支持外鍵(如InnoDB)的表上工作。 某些表類型不支持諸如MyISAM的外鍵,因此應該在使用MySQL ON DELETE CASCADE引用操作的表上選擇適當的存儲引擎。

查找受MySQL ON DELETE CASCADE操作影響的表的技巧

有時,當要從表中刪除數據時,知道哪個表受到MySQL ON DELETE CASCADE參考操作的影響是有用的。 可從information_schema數據庫中的referential_constraints表中查詢此數據,如下所示:

USE information_schema;

SELECT

table_name

FROM

referential_constraints

WHERE

constraint_schema = 'database_name'

AND referenced_table_name = 'parent_table'

AND delete_rule = 'CASCADE'

例如,要使用示例數據庫(testdb,因為上面兩個表是建立在testdb數據庫之上的)中的CASCADE刪除規則查找與建筑表相關聯的表,請使用以下查詢:

USE information_schema;

SELECT

table_name

FROM

referential_constraints

WHERE

constraint_schema = 'testdb'

AND referenced_table_name = 'buildings'

AND delete_rule = 'CASCADE'

執行上面查詢語句,得到以下結果 -

+------------+

| table_name |

+------------+

| rooms |

+------------+

1 row in set

在本教程中,我們一步一步向您展示了如何在從父表中刪除數據時,使用MySQL ON DELETE CASCADE引用操作從外鍵自動從子表中刪除相關聯的數據。

¥ 我要打賞

糾錯/補充

收藏

加QQ群啦,易百教程官方技術學習群

注意:建議每個人選自己的技術方向加群,同一個QQ最多限加 3 個群。

總結

以上是生活随笔為你收集整理的mysql ondelete_MySQL on delete cascade语句的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。