博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Mysql on delete cascade 总结
阅读量:6448 次
发布时间:2019-06-23

本文共 2049 字,大约阅读时间需要 6 分钟。

建立测试表

查看版本信息

select version();5.7.22

创建父表

drop table if exists Models;CREATE TABLE Models  (    ModelID SMALLINT UNSIGNED NOT NULL AUTO_INCREMENT,   Name VARCHAR(40) NOT NULL,    PRIMARY KEY (ModelID));

创建子表

drop table if exists Orders;CREATE TABLE Orders  (    ID          SMALLINT UNSIGNED NOT NULL PRIMARY KEY,   ModelID     SMALLINT UNSIGNED NOT NULL,     Description VARCHAR(40),    FOREIGN KEY (ModelID) REFERENCES Models (ModelID)      ON DELETE cascade  );

测试

测试用例-无父表相应数据,先插入子表

insert into Orders(Id,ModelID,Description) values (1,1,'a');

结果:执行失败

异常:[2018-07-31 11:08:01] 23000 Cannot add or update a child row: a foreign key constraint fails (bov.Orders, CONSTRAINT Orders_ibfk_1 FOREIGN KEY (ModelID) REFERENCES Models (ModelID) ON DELETE CASCADE)
原因:通不过on delete cascade 的外键约束检查

测试用例-先插入主表数据,再插入子表数据

insert into Models(ModelID,Name) values (1,'a');insert into Orders(Id,ModelID,Description) values (1,1,'a');

结果:执行成功

select * from Models;1    aselect * from Orders;1    1    a

测试用例-父子表都有数据,删除子表数据

delete from Orders where id = 1;

结果:执行成功

select * from Models;1    aselect * from Orders;为空

测试用例-父子表都有数据,删除父表书库

delete from Models where ModelID = 1;

结果:执行成功

select * from Models;为空select * from Orders;为空

测试用例-父子表都有数据,更新子表外键

update Orders set ModelID = 3 where ID =1;

结果:执行失败

异常:[2018-07-31 12:33:02] 23000 Cannot add or update a child row: a foreign key constraint fails (bov.Orders, CONSTRAINT Orders_ibfk_1 FOREIGN KEY (ModelID) REFERENCES Models (ModelID) ON DELETE CASCADE)
原因:通不过on delete cascade 的外键约束检查

测试用例-父子表都有数据,更新父表主键

update Models set ModelID = 2 where ModelID =1;

结果:执行失败

异常:[2018-07-31 12:34:24] 23000 Cannot delete or update a parent row: a foreign key constraint fails (bov.Orders, CONSTRAINT Orders_ibfk_1 FOREIGN KEY (ModelID) REFERENCES Models (ModelID) ON DELETE CASCADE)
原因:通不过on delete cascade 的外键约束检查

测试用例-父子表都有数据,更新子表非外键

update Orders set Description = 'b' where ID =1;

结果:执行成功

select * from Orders;1    1    b

测试用例-父子表都有数据,更新父表非主键

update Models set Name = 'c' where ModelID =1;

结果:执行成功

select * from Models;1    c

转载地址:http://rhlwo.baihongyu.com/

你可能感兴趣的文章
即时编译和打包您的 Groovy 脚本(转)
查看>>
未能加载文件或程序集 Microsoft.ReportViewer.Common, Version=11.0.0.0
查看>>
嵌入式 hi3518c裸板uboot烧写、kernel烧写、fs烧写小结
查看>>
【直击2017杭州·云栖大会】TECH INSIGHT企业级技术赋能专场
查看>>
服务器托管怎么选择好的服务商
查看>>
物联网:带来连接、平台两大机遇
查看>>
在微博微信看不到真诚?这些社交应用让你不用再装
查看>>
82%的IT专业人员认为Windows 10会让他们的公司更安全
查看>>
与美女CEO罗元裳共进午餐!朋友圈被7分钟理财刷屏!
查看>>
卡巴斯基网络安全解决方案实现自动化
查看>>
皮尤:62%美国成人从社交网站获取新闻
查看>>
Windows 10 Mobile内部编译版本已移除Silverlight支持
查看>>
“对外”SaaS蓝海:移动CRM最吸金
查看>>
反倾销半年涉案85亿 光伏出口或受影响
查看>>
图尔克推行户RFID设备控制器TBEN-L-DCC,可进行数据控制
查看>>
有了大数据的介入 以后考试可能都没法作弊了
查看>>
数据中心服务器虚拟化技术介绍
查看>>
要想做好软件测试工作,就要学会思考并问为什么
查看>>
qa应掌握的技能
查看>>
三部委:鼓励光伏项目进口先进技术和产品
查看>>