提示:本文主要讲的是mysql和sqlserver中的用法
1.用法(删除的内容)
drop:从数据库中删除整个表,所有的数据行,索引和权限也会被删除。
语法:
drop table if exists 表名;
truncate:删除表中的所有数据,但不清除表的结构(列、索引、触发器、约束等)。
语法:
truncate table 表名;
代码示例:
已知有一个employeeId为主键自增的表employee
我们使用truncate删除表中数据,然后插入一条数据,再查询employee表
truncate table employee
insert into employee(departmentId,employeeName,birthday)
values(12,'王五','1990-01-01')
select * from employee
结果新插入数据的employeeId是从1开始的。
delete:用于删除表中的数据行,但它不会删除表本身以及表的结构。与drop和truncate不同,delete可以筛选表中的数据行进行删除。
语法:
delete from 表名 where 条件;
虽然delete和truncate都不删除表结构,但是还是有区别,如下:
已知有一个employeeId为主键自增的表employee
我们使用delete删除表中数据,然后插入一条数据,再查询employee表
delete from employee
insert into employee(departmentId,employeeName,birthday)
values(12,'王五','1990-01-01')
select * from employee
结果新插入数据的employeeId是从3开始的。
2.性能(删除的速度)
drop:删除速度最快,无法回滚。
truncate:不记录每行数据的删除操作,而是直接释放整个表占用的空间,因此也无法回滚,删除速度比delete快。
delete:逐行删除数据,并且会记录每一行的删除操作到事务日志中。删除的过程中可能还会触发触发器,速度最慢但是可以回滚。