问答文章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

我来回答

4个回答

懂视网 时间: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

联合查询分为左联、内联、右联,
左联:select a.xxx,b.ccc from tableA a left join tableB b on a.id=b.id;
内联:select a.xxx,b.ccc from tableA a inner join tableB b on a.id=b.id;
右联:select a.xxx,b.ccc from tableA a right join tableB b on a.id=b.id;

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

select top 7 a.sname,count(b.cname) as 选课的数目 from stu a left join 选课表 b on a.sid = b.sid group by a.sname order by count(b.cname) desc

热心网友 时间:2022-04-07 22:36

使用 group by ,count ,应该就可以了。
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
如何分别真金和仿金首饰 怎样区分真金和仿金首饰呢 小学生新年晚会主持人的串词!!(不要太多)急 大大后天就需要了!!!_百度... 周年晚会策划公司 奥格瑞玛传送门大厅在哪 奥格瑞玛传送门大厅怎么走 锻炼颈椎的几个动作 水多久能结冰 冰能在多长时间内形成 请问水低于0度会结冰吗? 如何防止脱发严重 嘴唇上有黑印用蜜蜡和棉线去除了胡须 带⭕️的错号怎么打出来? 微信中添加银行卡前支付密码是什么意思, 微信绑定不了银行卡。支付密码是什么? 微信为啥点击添加银行卡直接让输支付密码 错号符号 微信添加银行卡为什么要支付密码了 室内设计需要学习英语吗? 《全能大佬又被拆马甲了》从哪看? 学平面设计与室内设计,上机操作的时候,要用英语吗! 一点英文都不懂的情况下,自学室内设计难度大吗?初学者要如何才能学好室内设计? 装修有必要学英语吗,我想学室内设计,在装修有所发展 英语不好可以学设计吗? 大专学“动画设计与制作”专业需要画画很好吗,我画画不好,电脑绘画又是怎样的,可以代替手绘吗 室内设计要英文吗? 《满级大佬又被拆马甲了》最新章节全文阅读免费下载百度网盘资源,谁有? 英语不好能学室内设计吗? 一个不会用画笔画画的人能不能学会用电脑画画 室内设计师必须会有多门外语吗? 如果要学习用电脑画画应该学什么专业,以后能做什么 英语对室内设计师重要吗? 威宁汉族和少数民族的人数哪个人数多? 360水滴摄像头跟手机对话怎么切换对讲模式和电话模式 为什么家里安装360摄像头随时发出上线的语音? 360 摄像头保护提示怎么关? 360摄像机对话不能用 我说话她们听不见 网上国网上的电费余额怎么和微信上的电费余额不一样- 问一问 有没有在微信上交过电费的人, 在微信上交电费准不准? PS画笔描边路径,如何令线条不渐变? ps里怎么把渐隐取消、、 拜托了、、 ps怎么取消渐变 PS钢笔画好路径描边怎么成了这样? ps钢笔路径描边两边渐隐 微信缴电费可靠吗 ps路径描边选择模拟画笔为什么只有一边是渐隐 ps里怎么设置画笔的渐隐值 我的窗口是这样的 怎么没有设置渐隐值的 ? 怎么更改 ps 渐隐渐变设置 PS渐隐线 PS 画笔 两头渐隐 怎么调 + + + ps描边路径渐隐不好用是怎么回事? PS里的渐隐在哪