问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

mysql表级联

发布网友 发布时间:2022-04-07 18:14

我来回答

3个回答

懂视网 时间:2022-04-07 22:35

            MySQL支持外键的存储引擎只有InnoDB,在创建外键的时候,要求父表必须有对应的索引,子表在创建外键的时候也会自动创建对应的索引。在创建索引的时候,可以指定在删除、更新父表时,对子表进行的相应操作,包括RESTRICT、NOACTION、SET NULL和CASCADE。其中RESTRICT和NO ACTION相同,是指在子表有关联记录的情况下父表不能更新;CASCADE表示父表在更新或者删除时,更新或者删除子表对应记录;SET NULL则是表示父表在更新或者删除的时候,子表的对应字段被SET NULL。下面以一个新闻表说明,该新闻数据库的结构如下:

技术分享

create database yynews;
use yynews;
#新闻类别表
create table categories(
catId int AUTO_INCREMENT primary key,
catName varchar(40) not null unique
)charset utf8;
#新闻表:
create table news(
newsId int AUTO_INCREMENT primary key,
title varchar(100) not null unique,
content text not null,
createTime timestamp not null,
catId int
)charset utf8;
#添加外键的引用
alter table news add constraint foreign key(catid) references categories(catid);
#评论表:
create table comments(
commId int AUTO_INCREMENT primary key,
content text not null,
createTime timestamp not null,
newsId int not null,
userIP char(15) not null
)charset utf8;
#添加外键的引用
alter table comments add constraint foreign key(newsid) references news(newsid);
#插入测试数据
insert into categories(catname) values("娱乐新闻");
insert into categories(catname) values("国际新闻");
insert into news(title,content,createTime,catId) values(‘test1‘,‘test1‘,now(),1);
insert into news(title,content,createTime,catId) values(‘test2‘,‘test2‘,now(),2);
insert into news(title,content,createTime,catId) values(‘test3‘,‘test3‘,now(),1);
insert into comments(content,createTime,newsId,userIP) values(‘you‘,now(),1,‘127.0.0.1‘);
insert into comments(content,createTime,newsId,userIP) values(‘you‘,now(),2,‘127.0.0.1‘);
insert into comments(content,createTime,newsId,userIP) values(‘you‘,now(),3,‘127.0.0.1‘);
insert into comments(content,createTime,newsId,userIP) values(‘you‘,now(),1,‘127.0.0.1‘);
如下:
mysql> select * from categories;
+-------+--------------+
| catId | catName      |
+-------+--------------+
|     2 | 国际新闻     |
|     1 | 娱乐新闻     |
+-------+--------------+
2 rows in set (0.00 sec)

mysql> select * from news;
+--------+-------+---------+---------------------+-------+
| newsId | title | content | createTime          | catId |
+--------+-------+---------+---------------------+-------+
|      1 | test1 | test1   | 2015-05-19 15:22:53 |     1 |
|      2 | test2 | test2   | 2015-05-19 15:22:53 |     2 |
|      3 | test3 | test3   | 2015-05-19 15:22:53 |     1 |
+--------+-------+---------+---------------------+-------+
3 rows in set (0.00 sec)

mysql> select * from comments;
+--------+---------+---------------------+--------+-----------+
| commId | content | createTime          | newsId | userIP    |
+--------+---------+---------------------+--------+-----------+
|      1 | you     | 2015-05-19 15:22:53 |      1 | 127.0.0.1 |
|      2 | you     | 2015-05-19 15:22:53 |      2 | 127.0.0.1 |
|      3 | you     | 2015-05-19 15:22:53 |      3 | 127.0.0.1 |
|      4 | you     | 2015-05-19 15:22:54 |      1 | 127.0.0.1 |
+--------+---------+---------------------+--------+-----------+
4 rows in set (0.00 sec)
在还没有添加任何的级联操作的时,删除有关联的数据会报错。
mysql> delete from categories where catid=1;
ERROR 1451 (23000): Cannot delete or update a parent row: a foreign key constraint fails (`yynews`.
`comments`, CONSTRAINT `comments_ibfk_1` FOREIGN KEY (`newsId`) REFERENCES `news` (`newsId`))
数据库报错告诉你有个外键阻止了你的操作。所以我们可以添加级联操作。也可以再创建数据库的时候就指定级联操作
如下:
#级联操作
alter table news add constraint foreign key(catid) references categories(catid) on delete cascade
on update cascade;
alter table comments add constraint foreign key(newsid) references news(newsid) on delete cascade
on update cascade;
#上面这句的这两个语句就是在添加外键的时候为该表和表之间添加级联操作,即,数据表在删除或更新数据表时,相
关连的表也会同时更新或删除。
例如:
mysql> delete from categories where catid=1;
Query OK, 1 row affected (0.03 sec)
我们删除了类别catid为1的数据即:娱乐新闻,那么有关娱乐新闻的news中的数据double将会被删除,新闻被删除的同时,新闻下的评论也会被同时删除。
如下所示:
mysql> select * from news;
+--------+-------+---------+---------------------+-------+
| newsId | title | content | createTime          | catId |
+--------+-------+---------+---------------------+-------+
|      2 | test2 | test2   | 2015-05-19 15:17:03 |     2 |
+--------+-------+---------+---------------------+-------+
1 row in set (0.00 sec)

mysql> select * from comments;
+--------+---------+---------------------+--------+-----------+
| commId | content | createTime          | newsId | userIP    |
+--------+---------+---------------------+--------+-----------+
|      2 | you     | 2015-05-19 15:17:03 |      2 | 127.0.0.1 |
+--------+---------+---------------------+--------+-----------+

1 row in set (0.00 sec)


mysql级联操作(实例)

标签:mysql的级联操作   级联操作   

热心网友 时间:2022-04-07 19:43

按照你的sql, 先建了表2,再建立表1,然后删除表2中数据时, 表1中有此外键的数据被级联删除,没有问题。如果你有问题看一下你的删除sql有没有写错,还有问题就看一下是不是mysql版本问题
希望能解决您的问题。追问拜托看清呀,我问的是有没有默认的,默认多少,restrict 、set null 、cascade??

热心网友 时间:2022-04-07 21:01

最好不要用外键,你可以做一个事件,在删除A表的时候同时会删除B便利绑定对应的数据
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
临沂比较有名的男装品牌 呼伦贝尔市悦动网络科技有限公司怎么样? 呼伦贝尔中汇实业有限公司怎么样? 呼伦贝尔油玉不绝电子商务有限公司怎么样? 如何避免wps卡顿? 属鼠的男人找对象是属什么,属鼠的人和什么属相合 96年鼠的姻缘在哪年 属相相合年份运势提升 2024属鼠找对象属什么最佳 黑客攻击网站能报案吗 黑客攻击报案有用吗 潍坊今日头条恶意讨薪 潍坊的最新反腐 我是山东潍坊的请问拖欠工资应该找什么地方投诉投诉电话是多少谢谢 潍坊市纪委,我的材料三个月了,为什么直今没有消息,是不是纪委案子太多, 谁知道潍坊110的监督电话,他们的破案效率太慢 !!!我要举报!!! android手机中的运行内存和手机内存分别指什么,有什么区别 针对安卓手机被硬件划走的一部分运行内存,手机用户如何查看呢 举报山东省潍坊监狱电话是多少 潍坊滨海公务员欠债不还,耍无赖---如何讨回欠款 什么网站能免费看动漫?要速度快的 怎么看安卓车机运行内存 excel中怎么片金额大写变小写 这两个颜色的玉哪个最适合男士戴? 中国美术史雕塑艺术的特征是什么? 太阳能的阀门换了,但回水管一直流水怎么回事 砖雕属于哪些类型的艺术? 烟灰色和田玉戴久了有什么变化? 烟灰色的和田玉鱼吊坠适合女的一戴吗? 什么是雕刻艺术 雕塑是什么艺术 变更抚养权的条件是哪些 不小心生吃芋头荷杆喉咙痛一直流口水怎么办? 变更抚养权的条件法律规定是什么 吃芋头杆的时候 喉咙会麻麻的 感觉像是在腐蚀一样 怎么回事?吃多了喉咙还会肿(不单单是我) 有毒?? 孩子抚养权变更有哪些条件 离婚后小孩抚养权变更 中午吃了芋头梗,嘴巴舌头刺痛,一直痛到喉咙,请问是不是中毒了? 变更抚养权的条件法律规定 芋头吃完咽喉很麻怎么办? 向银行申请贷款买车需要哪些条件 抚养权变更条件 贷款买车需要什么条件??? 有哪些变更抚养权的法律规、 打印机的型号是什么意思? 吃了芋头杆子嘴巴好痒怎么办? 吃芋头杆会不会中毒 鸡爪芋能吃多吗为什么刚吃就像针扎嘴喉咙痛,会中毒吗? 理财和股票的区别 最新孩子抚养权变更流程 理财收益高低和股市的关系