共计 1001 个字符,预计需要花费 3 分钟才能阅读完成。
原文链接: 何晓东 博客
最直观区别:truncate drop 是 DDL 语句,有隐式提交,不可回滚,delete 是 DML 语句,能够回滚。
truncate
- truncate 会删除并从新创立表,比 delete 要快,尤其对于大型表。
- truncate 会导致隐式提交,因而无奈回滚。
- 如果以后有沉闷的表锁,则无奈进行 truncate
- 如果表或者 NDB 表的援用表的其余表有任何束缚,则他们的 truncate 会失败,而 delete 容许同一表的列之间的外键束缚。(没太了解,原文为:TRUNCATE TABLE fails for an table or NDB table if there are any constraints from other tables that reference the table. Foreign key constraints between columns of the same table are permitted. InnoDB FOREIGN KEY)
- truncate 不返回已删除的函数,通常是“0 行受影响”,应了解为“无信息”。
- 只有表定义无效,即便数据或索引文件已损坏,也能够将表从新创立为具备 truncate table 的空表。
- 任何值都将重置为其开始值。即便对于并且通常不重用序列值也是如此。
- 与分区表一起应用时,TRUNCATE TABLE 保留分区。也就是说,在分区定义不受影响的状况下,将删除并从新创立数据和索引文件。
- truncate 不会调用触发器,delete 会调用触发器。
- truncate 设置反对 INNODB 引擎损坏的表。
drop
- 它删除表定义和所有表数据。如果对表进行了分区,则该语句将删除表定义,其所有分区,存储在这些分区中的所有数据以及与删除的表关联的所有分区定义。
- drop table 也会删除该表的所有触发器。
- drop table 是 DDL,也会导致隐式提交,不可回滚,在和 关键字 一起提交的状况下例外。
- drop table 不会调用触发器。
delete
- delete 是 DML,会记录日志,同时也能够回滚。
- delete 会对行加锁。
- 被删除的数据行只是被标记删除,不会缩小占用空间,新增的数据能够间接复用标记为删除的记录的存储空间。
参考链接:
- mysql doc truncate table
- mysql doc drop table
- Difference Between TRUNCATE, DELETE, And DROP In SQL Server
顺带新人们买 特惠阿里云服务器 吗?
正文完