如何清空表?想必很多人都回答delete
或先drop table
再create table
,但是,delete
的效率比较低,drop table
再create table
的写法比较复杂,相比而言,truncate table
可以一步到位、更高效率地完成清空表的操作。
truncate table
语法如下:
TRUNCATE [TABLE] tbl_name
truncate table
属于DDL语句,它可以更快地秒删数据,不需要提交事务,但使用它需要drop
权限。
以下是truncate table
和delete
的区别:
-
truncate
相当于先drop
再create
,它比起delete
一行行删除更加快; -
truncate
操作会隐式提交,因此无法回滚; - 当SQL会话持有活跃表的锁(lock)时,
truncate
操作无法执行; - 当其它表有着引用此表的外键时,此表无法被
truncate table
,但是,如果外键引用自身,则允许执行truncate table
; -
truncate table
不会告诉你删除了多少行数据,通常结果无非“0 rows affected”,其实就是“没有信息”; - 任何
aoto_increment
值会被重置为起始值,这对MyISAM
和InnoDB
同样有效; - 对于分区表,
truncate table
保留着分区,也就是说,数据和索引文件被清空和重建,但是分区定义文件(.par)文件不受影响; -
truncate table
语句不会触发delete
触发器。
网友评论