SQL---TRUNCATE、DELETE、DROP 的区别
TRUNCATE
定义
TRUNCATE 是一种用于快速删除表中所有数据的操作,但保留表结构。
语法
TRUNCATE TABLE 表名;
特点
速度:非常快,因为它不记录单个行的删除操作。
日志记录:只记录页级或块级的日志,而不是每一行的日志,因此效率更高。
事务:通常不可回滚(取决于数据库管理系统)。
触发器:不会触发任何 DELETE 触发器。
锁机制:对表加表级锁,阻止其他进程访问该表。
约束:不影响表上的索引、视图等对象。
权限:需要 DROP 权限,因为 TRUNCATE 实际上是删除并重新创建表的数据段。
对于自增主键的MySQL影响
TRUNCATE TABLE 会重置自增计数器,下一次插入数据时,主键值从初始值(通常是 1)开始。
DELETE
定义
DELETE 是一种用于从表中删除特定行或所有行的操作。
语法
DELETE FROM 表名 [WHERE 条件];
特点
速度:较慢,因为它会为每一行生成日志记录。
日志记录:记录每一行的删除操作,因此可以回滚。
事务:可以作为事务的一部分进行回滚。
触发器:会触发 DELETE 触发器。
锁机制:对受影响的行加行级锁,允许其他进程访问未受影响的行。
约束:受外键约束的影响,可能需要额外处理(如禁用外键检查)。
权限:需要 DELETE 权限。
对于自增主键的MySQL影响
不会重置自增计数器;
DROP
定义
DROP 是一种用于删除整个表(包括其结构和数据)的操作。
语法
DROP TABLE 表名;
特点
速度:较快,因为它直接删除表及其所有相关对象。
日志记录:记录整个表的删除操作,但不记录单个行的删除。
事务:不能回滚(取决于数据库管理系统)。
触发器:删除表的所有触发器、索引、视图等相关对象。
锁机制:对表加表级锁,阻止其他进程访问该表。
约束:删除表的所有约束和关联对象。
权限:需要 DROP 权限。
浙公网安备 33010602011771号