mysql中删除表记录delete from和truncate table的用法区别
上一篇 /
下一篇 2011-11-08 20:56:55
/ 个人分类:mysql
周末马拉松去了,连博客都忘了写,最近双十一活动直播间的项目一直很忙,等到结束了再写一个总结出来。这儿先摘录一点关于
mysql的知识,当时
面试的时候被问到过。
mysql中删除表记录delete
from和truncate table的用法区别:
MySQL中有两种删除表中记录的方法:
(1)delete
from语句,
(2)truncate
table语句。
delete
from语句可以使用where对要删除的记录进行选择。delete语句更灵活。
truncate
table将删除表中的所有记录。
情况一:清空表中的所有记录,可以使用下面的两种方法:
delete
from tablename
truncate
table tablename
其中第二条记录中的table是可选的。
情况二:删除表中的部分记录,只能使用delete语句。
delete
FROM table1 WHERE ;
区别:
(1)如果delete不加WHERE子句,那么它和truncate
table是一样的,但它们有一点不同,那就是delete可以返回被删除的记录数,而truncate table返回的是0。
(2)如果一个表中有自增字段,使用truncate
table和没有WHERE子句的delete删除所有记录后,这个自增字段将起始值恢复成1.如果你不想这样做的话,可以在delete语句中加上永真的WHERE,如WHERE
1或WHERE true。
delete
FROM table1 WHERE 1;
上面的语句在执行时将扫描每一条记录。但它并不比较,因为这个WHERE条件永远为true。这样做虽然可以保持自增的最大值,但由于它是扫描了所有的记录,因此,它的执行成本要比没有WHERE子句的delete大得多。
(3)还有一点就是,如果要删除表中的所有数据,建议使用truncate
table, 尤其是表中有大量的数据, 使用truncate table是将表结构重新建一次速度要比使用delete from快很多,而delete
from是一行一行的删除,速度很慢.
总结:
delete和truncate
table的最大区别是delete可以通过WHERE语句选择要删除的记录。但执行得速度不快。而且还可以返回被删除的记录数。而truncate
table无法删除指定的记录,而且不能返回被删除的记录。但它执行得非常快。
delete :
与标准的SQL语句不同,delete支持ORDER
BY和LIMIT子句。
delete
FROM users WHERE name = 'nike' ORDER BY id DESC LIMIT 6;
收藏
举报
TAG: