創建表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操作(了解)