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

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

2010-10-08 16:05 佚名 互联网 字号:T | T

在MySQL数据库中,DELETE语句和TRUNCATE TABLE语句都可以用来删除数据,但是这两种语句还是有着其区别的,下文就为您介绍这二者的差别所在。

AD:干货来了,不要等!WOT2015 北京站演讲PPT开放下载!

MySQL DELETE语句和TRUNCATE TABLE语句功能相似,但是二者究竟有何区别呢?下文就将为您分析MySQL DELETE语句和TRUNCATE TABLE语句的区别,供您参考。

MySQL中有两种方法可以删除数据,一种是MySQL DELETE语句,另一种是MySQL TRUNCATE TABLE语句。DELETE语句可以通过WHERE对要删除的记录进行选择。而使用TRUNCATE TABLE将删除表中的所有记录。因此,DELETE语句更灵活。

如果要清空表中的所有记录,可以使用下面的两种方法:

DELETE FROM table1
TRUNCATE TABLE table1
其中第二条记录中的TABLE是可选的。

如果要删除表中的部分记录,只能使用DELETE语句。

DELETE FROM table1 WHERE ;
如果DELETE不加WHERE子句,那么它和TRUNCATE TABLE是一样的,但它们有一点不同,那就是DELETE可以返回被删除的记录数,而TRUNCATE TABLE返回的是0。

如果一个表中有自增字段,使用TRUNCATE TABLE和没有WHERE子句的DELETE删除所有记录后,这个自增字段将起始值恢复成1.如果你不想这样做的话,可以在DELETE语句中加上永真的WHERE,如WHERE 1或WHERE true。

DELETE FROM table1 WHERE 1;
 上面的语句在执行时将扫描每一条记录。但它并不比较,因为这个WHERE条件永远为true。这样做虽然可以保持自增的最大值,但由于它是扫描了所有的记录,因此,它的执行成本要比没有WHERE子句的DELETE大得多。

DELETE和TRUNCATE TABLE的最大区别是DELETE可以通过WHERE语句选择要删除的记录。但执行得速度不快。而且还可以返回被删除的记录数。而TRUNCATE TABLE无法删除指定的记录,而且不能返回被删除的记录。但它执行得非常快。

和标准的SQL语句不同,MySQL DELETE语句支持ORDER BY和LIMIT子句,通过这两个子句,我们可以更好地控制要删除的记录。如当我们只想删除WHERE子句过滤出来的记录的一部分,可以使用LIMIB,如果要删除后几条记录,可以通过ORDER BY和LIMIT配合使用。假设我们要删除users表中name等于"Mike"的前6条记录。可以使用如下的DELETE语句:

DELETE FROM users WHERE name = ‘Mike‘ LIMIT 6;
一般MySQL并不确定删除的这6条记录是哪6条,为了更保险,我们可以使用ORDER BY对记录进行排序。

DELETE FROM users WHERE name = ‘Mike‘ ORDER BY id DESC LIMIT 6;

来源: <http://database.51cto.com/art/201010/229086.htm>

来自为知笔记(Wiz)

时间: 2024-08-07 04:30:49

MySQL DELETE语句和TRUNCATE TABLE语句的区别的相关文章

请说明SQLServer中delete from tablea &amp; truncate table tablea的区别

解答:两者都可以用来删除表中所有的记录.区别在于:truncate是DDL操作,它移动HWK,使HWK值为0,不需要 rollback segment .而Delete是DML操作需要rollback segment 且花费较长时间. 原文地址:https://www.cnblogs.com/borter/p/9547538.html

truncate table语句和delete table语句的区别

truncate table 表名 ; delete from 表名; 都是用来删除表中所有的记录,前者删除数据后表的标识列会重新开始编号,它比delete语句使用的系统资源和事务日志资源更少,但是表的结构,列,约束,索引等不会被改动,同时不能用于有外键约束引用的表,在实际工作中,不建议使用truncate ,因为使用它删除的数据不能恢复还原,而使用delete的话就可以恢复

转换sql文件的create table语句为drop table语句

1 package com.csii.pweb.query.action; 2 3 import java.io.BufferedReader; 4 import java.io.FileNotFoundException; 5 import java.io.FileReader; 6 import java.io.IOException; 7 import java.util.ArrayList; 8 import java.util.List; 9 10 11 public class Ja

truncate table与delete区别

truncate table需要drop table权限,它是完全清空一张表. 从逻辑上看,truncate table同delete 一样,或是drop table +create table一样.使用truncate table删除全表数据,要比delete要快.使用truncate table清空数据,不能进行回滚,且不受表间外键约束限制. truncate是DDL语句,而且delete是DML语句,两者区别如下: 1.truncate 是邮drop table+create table

truncate table 和delete

delete table 和 truncate table 使用delete语句删除数据的一般语法格式: delete [from] {table_name.view_name} [where<search_condition>] 将XS表中的所有行数据删除 delete XS 执行完后,发现XS表中的数据都删除了,但是表的结构什么都还在. truncate truncate table语句将删除指定表中所有数据,因此也称其为清除表数据语句,一般格式如下 truncate table name

delete table 和 truncate table

转载:http://www.cnblogs.com/herbert/archive/2010/07/06/1772135.html 使用delete语句删除数据的一般语法格式: delete [from] {table_name.view_name} [where<search_condition>] 将XS表中的所有行数据删除 delete XS 执行完后,发现XS表中的数据都删除了,但是表的结构什么都还在. truncate truncate table语句将删除指定表中所有数据,因此也称

mysql delete删除记录数据库空间不减少问题解决方法

记得在中学时学计算机时老师就告诉我delete删除记录只是给数据库中的记录加一个删除标识了,这样数据库空间并不是减少了,当时没想这么多,昨天发现一个数据库利用delete 删除之后容量没变,后来百度了一下发现了下面一站长分享的文件,写得非常的不错,整理一下给各位参考. 今天空间商告诉我数据库空间满了,检查了一下,发现网站用户行为记录数据表竟然占了20多MB.积累了半年了,该删除释放一下空间了.果断delete之后发现数据库空间竟然没少,虽然数据记录数是零. 原来这是因为删除操作后在数据文件中留下

详解Oracle中 DELETE、TRUNCATE 和 DROP 的区别

前言 以前做项目的时候,很少关注知识点中比较细节的东西,正好今天有这个机会,就把 Oracle 中几个常用的函数区分一下. 语法 delete from table_name truncate table table_name drop table table_name 区别 delete from后面可以写条件,truncate不可以,drop后边一般也不写条件. delete from记录是一条条删的,所删除的每行记录都会进日志,而truncate一次性删掉整个页,因此日志里面只记录页释放,

SQL中的Truncate Table

SQL中的Delete语句从表中删除一条或多条记录,同时可以给Delete语句提供Where子句,SQL中的 Select语句中可以使用的任何条件都可以在DELECT的WHERE子句中使用.Delete语句的语法格式是: DELETE [FROM] {table_name|view_name}  [WHERE condition]. 如果不给Delete语句指定Where子句,表中的所有记录都将被删除.一般在执行Delete语句时,一定要仔细斟酌Where子句.如果确实需要删除表中的所有记录,应