在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是一行一行的删除,速度很慢。
-
顶
- 0