mysql 級聯刪除


創建表1

mysql> CREATE TABLE C(
    ->
    ->        id TINYINT PRIMARY KEY auto_increment,
    ->        name VARCHAR (20),
    ->        age INT ,
    ->        is_marriged boolean  -- show create table ClassCharger: tinyint(1)
    ->
    -> );

添加表1數據

mysql> INSERT INTO C (name,age,is_marriged) VALUES ("冰冰",12,0),
    ->                                                        ("丹丹",14,0),
    ->                                                        ("歪歪",22,0),
    ->                                                        ("姍姍",20,0),
    ->                                                        ("小雨",21,0);

創建表2  並把子鍵和主鍵建立關聯並添加級聯刪除

mysql> CREATE TABLE S3(
    ->        id INT PRIMARY KEY auto_increment,
    ->        name VARCHAR (20),
    ->        charger_id TINYINT,
    ->        FOREIGN KEY (charger_id) REFERENCES C(id) ON DELETE CASCADE       
    -> );

添加表2數據

mysql> INSERT INTO S3(name,charger_id) VALUES ("alvi1",2),
    ->                                             ("alvi2",4),
    ->                                             ("alvi3",5),
    ->                                             ("alvi4",3),
    ->                                             ("alvi5",5),
    ->                                             ("alvi6",3),
    ->                                             ("alvi7",2);

 

 

未刪除前數據

mysql> SELECT * from S3;
+----+-------+------------+
| id | name  | charger_id |
+----+-------+------------+
|  1 | alvi1 |          2 |
|  2 | alvi2 |          4 |
|  3 | alvi3 |          5 |
|  4 | alvi4 |          3 |
|  5 | alvi5 |          5 |
|  6 | alvi6 |          3 |
|  7 | alvi7 |          2 |
+----+-------+------------+
mysql> select * from C;
+----+------+------+-------------+
| id | name | age  | is_marriged |
+----+------+------+-------------+
|  1 | 冰冰 |   12 |           0 |
|  2 | 丹丹 |   14 |           0 |
|  3 | 歪歪 |   22 |           0 |
|  4 | 姍姍 |   20 |           0 |
|  5 | 小雨 |   21 |           0 |
+----+------+------+-------------+

 

輸入刪除語句

mysql> delete from C where id = 4;

 

刪除后表數據

mysql> select * from s3;
+----+-------+------------+
| id | name  | charger_id |
+----+-------+------------+
|  1 | alvi1 |          2 |
|  3 | alvi3 |          5 |
|  4 | alvi4 |          3 |
|  5 | alvi5 |          5 |
|  6 | alvi6 |          3 |
|  7 | alvi7 |          2 |
+----+-------+------------+
6 rows in set (0.00 sec)
mysql> select * from C;
+----+------+------+-------------+
| id | name | age  | is_marriged |
+----+------+------+-------------+
|  1 | 冰冰 |   12 |           0 |
|  2 | 丹丹 |   14 |           0 |
|  3 | 歪歪 |   22 |           0 |
|  5 | 小雨 |   21 |           0 |
+----+------+------+-------------+

 

 

 

------set null方式 在父表上update/delete記錄時,將子表上匹配記錄的列設為null
   -- 要注意子表的外鍵列不能為not null

 先刪除之前在s3的外鍵

mysql> ALTER TABLE s3 DROP FOREIGN KEY s3_ibfk_1;

添加set null方式

mysql> alter table s3 add constraint s3_fk_cc foreign key (charger_id)
    -> references c(id) on delete set null;

查看表記錄

mysql> select * from s3;
+----+-------+------------+
| id | name  | charger_id |
+----+-------+------------+
|  1 | alvi1 |          2 |
|  3 | alvi3 |          5 |
|  4 | alvi4 |          3 |
|  5 | alvi5 |          5 |
|  6 | alvi6 |          3 |
|  7 | alvi7 |          2 |
+----+-------+------------+
mysql> select * from C;
+----+------+------+-------------+
| id | name | age  | is_marriged |
+----+------+------+-------------+
|  1 | 冰冰 |   12 |           0 |
|  2 | 丹丹 |   14 |           0 |
|  3 | 歪歪 |   22 |           0 |
|  5 | 小雨 |   21 |           0 |
+----+------+------+-------------+

刪除c表jilu

mysql> delete from C where id = 3;

s3表記錄變為null

mysql> select * from s3;
+----+-------+------------+
| id | name  | charger_id |
+----+-------+------------+
|  1 | alvi1 |          2 |
|  3 | alvi3 |          5 |
|  4 | alvi4 |       NULL |
|  5 | alvi5 |          5 |
|  6 | alvi6 |       NULL |
|  7 | alvi7 |          2 |
+----+-------+------------+

 

------Restrict方式 :拒絕對父表進行刪除更新操作(了解)

------No action方式 在mysql中同Restrict,如果子表中有匹配的記錄,則不允許對父表對應候選鍵
   -- 進行update/delete操作(了解)


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM