delete from和truncate table的区别 | 您所在的位置:网站首页 › truncate加条件 › delete from和truncate table的区别 |
在mysql中,删除表的常见方式有两种: (1)delete from语句, (2)truncate table语句。
delete from语句可以和条件查询的where配合使用,用于筛选需要删除的内容 (例如:delete from test_zxk where id > 8 order by id desc limit 2;),总的来说delete from的语句更加灵活。 使用语句:delete FROM table1 WHERE ; 而truncate table是删除表中的所有记录。 truncate (table可选) tablename ;
二者之间的区别主要有以下几点: (1)如果delete不加WHERE子句,那么它和truncate table的执行当前效果是一样的,但它们有一点不同,那就是delete可以返回被删除的记录数,而truncate table返回的是0。 mysql> select * from test_zxk; +----+-------+ | id | value | +----+-------+ | 1 | a | | 2 | b | | 3 | c | | 5 | a | | 7 | b | | 9 | c | | 10 | a | | 11 | b | | 12 | c | +----+-------+ 9 rows in set (0.04 sec) mysql> delete from test_zxk; Query OK, 9 rows affected (0.04 sec)
mysql> insert into test_zxk (value) values ('a'), ('b'), ('c'); Query OK, 3 rows affected (0.04 sec) Records: 3 Duplicates: 0 Warnings: 0
mysql> select * from test_zxk; +----+-------+ | id | value | +----+-------+ | 13 | a | | 14 | b | | 15 | c | +----+-------+ 3 rows in set (0.04 sec)
mysql> select * from test_zxk; +----+-------+ | id | value | +----+-------+ | 1 | a | | 2 | b | | 3 | c | | 4 | a | | 5 | b | | 6 | c | +----+-------+ 6 rows in set (0.04 sec)
mysql> truncate test_zxk; Query OK, 0 rows affected (0.13 sec)
mysql> insert into test_zxk (value) values ('a'), ('b'), ('c'); Query OK, 3 rows affected (0.04 sec) Records: 3 Duplicates: 0 Warnings: 0
mysql> select * from test_zxk; +----+-------+ | id | value | +----+-------+ | 1 | a | | 2 | b | | 3 | c | +----+-------+ 3 rows in set (0.04 sec) 但是truncate删除后将重新水平线和索引(id从零开始) ,delete不会删除索引,所以对下次插入的序号影响是不一样的,通过delete方式删除的数据下次主键id值是基于上一次主键id值产生,而通过truncate方式删除后下次主键id值是从1产生: (2)使用delete语句时,可以加上永真的WHERE,如WHERE 1或WHERE true。 delete FROM table1 WHERE 1; 上面的语句在执行时将扫描每一条记录。但它并不比较,因为这个WHERE条件永远为true。这种情况下会扫描了所有的记录,因此,它的执行成本要比没有WHERE子句的delete大得多。 如果使用truncate table是删除表中的所有数据, 尤其是表中有大量的数据, 使用truncate table是将表结构重新建一次速度要比使用delete from快很多,而delete from是一行一行的删除,速度很慢。 (3)事务方面:由于truncate删除整表数据(ddl语句,隐式提交),delete是一行一行的删除,所以 truncate是不可以rollback的,但是delete是可以rollback的; (4)触发器方面: truncate 不能触发任何Delete触发器。 |
CopyRight 2018-2019 实验室设备网 版权所有 |