MySQL DELETE语句和TRUNCATE TABLE语句的区别

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了MySQL DELETE语句和TRUNCATE TABLE语句的区别相关的知识,希望对你有一定的参考价值。

参考技术A 在逻辑上truncate
table和delete语句都可以删除表里面所有数据,但是在一些情况下有些不同:
对于InnoDB表
1,如果没有外键关联,innodb执行truncate是先drop
table(原始表),再创建一个跟原始表一样空表,速度要远远快于delete逐条删除行记录。
2,如果使用innodb_file_per_table参数,truncate
table
能重新利用释放的硬盘空间,在InnoDB
Plugin中,truncate
table为自动回收,如果不是用InnoDB
Plugin,那么需要使用optimize
table来优化表,释放空间。
3,表有外键关联,truncate
table删除表数据为逐行删除,如果外键指定级联删除(delete
cascade),关联的子表也会会被删除所有表数据。如果外键未指定级联(cascde),truncate
table逐行删除数据,如果是父行关联子表行数据,将会报错。
4,auto_increment计数器在truncate
table后会重置为0.与是否有外键关联没有关系。

mysql语句中----删除表数据droptruncate和delete的用法

程度从强到弱
1、drop  table tb 
      drop将表格直接删除,没有办法找回
2、truncate (table) tb
      删除表中的所有数据,不能与where一起使用
3、delete from tb (where)
      删除表中的数据(可制定某一行)

区别:truncate和delete的区别
         1、事务:truncate是不可以rollback的,但是delete是可以rollback的;
              原因:truncate删除整表数据(ddl语句,隐式提交),delete是一行一行的删除,可以rollback
         2、效果:truncate删除后将重新水平线和索引(id从零开始) ,delete不会删除索引    
         3、 truncate 不能触发任何Delete触发器。
         4、delete 删除可以返回行数
      

以上是关于MySQL DELETE语句和TRUNCATE TABLE语句的区别的主要内容,如果未能解决你的问题,请参考以下文章

MySQL DELETE语句和TRUNCATE TABLE语句的区别

MySQL DELETE语句和TRUNCATE TABLE语句的区别

mysql语句中----删除表数据droptruncate和delete的用法

MySQL DELETE 语句

MySQL中DELETE子句与TRUNCATE TABLE语句的区别

MySQL delete语句的问题