4.3 表记录的删除
表记录的删除通常使用delete语句实现。如果要清空某一个表可以使用truncate语句。
4.3.1 使用delete删除表记录
如果表中的某条(或某些)记录不再使用,可以使用delete语句删除,delete语句的语法格式如下。
delete from表名[where条件表达式]
说明
如果没有指定 where子句,那么该表的所有记录都将被删除,但表结构依然存在。
例如,删除班级名为“2012计算机应用1班”的班级信息,可以使用下面的SQL语句,执行结果如图4-15所示。
use choose;
delete from classes where class_name='2012计算机应用1班';
select * from classes;
图4-15 表记录的删除
删除表记录时,需要注意表之间的外键约束关系以及级联选项的设置,例如,下面的 delete 语句完成的功能是直接删除班级表中的所有记录,然而该delete语句将不会被执行,执行结果如图4-16 所示。请读者考虑满足何种条件时,该delete语句才能成功执行。
use choose;
delete from classes;
select * from classes;
图4-16 表记录的删除与外键约束
4.3.2 使用truncate清空表记录
truncate table用于完全清空一个表,语法格式如下。
truncate [table]表名
从逻辑上说,该语句与“delete from表名”语句的作用相同,但是在某些情况下,两者在使用上有所区别。例如,如果清空记录的表是父表,那么truncate命令将永远执行失败。如果使用truncate table成功清空表记录,那么会重新设置自增型字段的计数器。truncate table 语句不支持事务的回滚,并且不会触发触发器程序的运行。
场景描述7:truncate与delete的区别。
步骤1:下面的SQL 语句中,create table 语句负责快速地创建一个new_class 表,且表结构与班级classes表的表结构相同。insert语句将班级classes表中的所有记录插入到new_class表中。select语句负责查询new_class表的所有记录。执行结果如图4-17所示。
use choose;
create table new_class like classes;
insert into new_class select * from classes;
select * from new_class;
步骤2:使用下面的MySQL命令查看new_class表的表结构,如图4-18所示。
show create table new_class;
图4-17 创建表结构、添加测试数据
图4-18 查看new_class表的表结构
步骤3:使用下面的SQL语句删除new_class表的所有记录后,new_class表的表结构如图4-19所示。
delete from new_class;
show create table new_class;
步骤4:使用下面的MySQL命令清除new_class表的所有记录后,new_class表的表结构如图4-20所示。
truncate table new_class;
show create table new_class;
图4-19 执行delete语句后
图4-20 执行truncate语句后
比较步骤3以及步骤4的执行结果,从中可以看出,delete语句并不会修改new_class表的自增型字段的起点;而使用truncate清除new_class表的所有记录后,new_class表的自增型字段的起点将被重置为1。
oZReUsyDkVxH81hLvO9Bj5WDS70V0vAgjrY28QBR0n0/0WCEhqHmiaShRKMGiPAL