歡迎來到MySQL實戰第45篇,修煉MySQL,不讓這一天又過去了。
在實際工作中,多表删除也是非常重要的,下面以編寫一個案例介紹并學習這個多表删除技術。
【表的構建】create table grade
(
id bigint(20) not null auto_increment,
name varchar(8) not null,
primary key(id)
)engine=InnoDB auto_increment=4 default charset=utf8;
insert into grade values(1,"一年級");
INSERT INTO `grade` VALUES (2, '二年級');
INSERT INTO `grade` VALUES (3, '三年級');
cREATE TABLE `student` (
`id` bigint(20) NOT NULL AUTO_INCREMENT,
`grade_id` bigint(20) NOT NULL COMMENT '年紀id',
`name` varchar(8) DEFAULT NULL,
`sex` tinyint(2) DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=3 DEFAULT CHARSET=utf8;
INSERT INTO `student` VALUES (1, 1, '張三', 1);
INSERT INTO `student` VALUES (2, 2, '李四', 2);
【多表删除的案例學習】
1.把表student中哪些grade_id值在grade表裡匹配的記錄全部删除。
<1>delete student from student,grade where student.grade_id=grade.id;
<2>delete from student using student,grade where student.grade_id=grade.id;
2.删除所有沒有在grade表中有年紀記錄的學生
<1>delete student from student left join grade on student.grade_id=grade.id where grade.id is null;
<2>delete from student using student left join grade on grade.id=student.grade_id where grade.id is null;
【總結性學習】
1.删除表的用法辨析
<1>drop table 表名; drop将表格直接删除,沒有辦法找回
<2>truncate(table) 表名; truncate 删除表中的所有數據,不能與where一起使用
<3>delete from 表名(where條件); delete 删除表中的數據。
2.truncate 和delete的區别
<1>事務:truncate 是不可以rollback的,但是delete是可以rollback的;
原因:trunctate删除整表數據,delete是一行一行的删除,可以rollback
<2>效果:truncate删除後将重新水平線和索引(id從零開始),delete不會删除索引。
<3>truncate不能觸發delete觸發器。
<4>delete删除可以返回行數。
關注财務總監的數據分析,一起修煉MySQL,500篇能掌握它。
,更多精彩资讯请关注tft每日頭條,我们将持续为您更新最新资讯!