MySQL删除表数据:DELETE 与 TRUNCATE 的区别

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

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

  DELETE FROM  tb_mail
  TRUNCATE TABLE tb_mail

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

  DELETE FROM users WHERE name = ‘niubi‘ LIMIT 6;

  一般MySQL并不确定删除的这6条记录是哪6条,为了更保险,我们可以使用ORDER BY对记录进行排序。

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

时间: 2024-10-12 04:07:38

MySQL删除表数据:DELETE 与 TRUNCATE 的区别的相关文章

删除表数据delete和truncate

TRUNCATE 命令用法语法TRUNCATE TABLE name 参数name 是要截断的表的名称或要删除其全部行的表的名称. 注释TRUNCATE TABLE 在功能上与不带 WHERE 子句的 DELETE 语句相同:二者均删除表中的全部行.但 TRUNCATE TABLE 比 DELETE 速度快,且使用的系统和事务日志资源少. DELETE 语句每次删除一行,并在事务日志中为所删除的每行记录一项.TRUNCATE TABLE 通过释放存储表数据所用的数据页来删除数据,并且只在事务日志

关于Mysql删除表数据的两种方式对比

1.delete from table_name 一行一行删除,只删除表数据,auto_increament仍停留在最后一天数据的下一个值. 2.truncate table_name 快捷删除表数据.先删除整个表,然后重新建表结构.auto_increament从1开始. 关于Mysql删除表数据的两种方式对比,布布扣,bubuko.com

mysql语句中----删除表数据drop、truncate和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是一行一行的删除,可以rol

mysql:删除表数据drop、truncate和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是一行一行的删除,可以rol

SQL语句中----删除表数据drop、truncate和delete的用法

一.SQL中的语法 1.drop table 表名称                         eg: drop table  dbo.Sys_Test 2.truncate table 表名称                     eg: truncate  table dbo.Sys_Test   3.delete from 表名称 where 列名称 = 值      eg: delete from dbo.Sys_Test where test='test' 二.drop,tru

Sql语句——删除表数据drop、truncate和delete的用法

一.SQL中的语法 1.drop table 表名称                         eg: drop table  dbo.Sys_Test   2.truncate table 表名称                     eg: truncate  table dbo.Sys_Test                     3.delete from 表名称 where 列名称 = 值      eg: delete from dbo.Sys_Test where te

sql有几种删除表数据的方式

有几种删除表数据的方式? truncate.delete和drop都可以删除数据. TRUNCATE TABLE删除表中的所有行,而不记录单个行删除操作. TRUNCATE TABLE 与没有 WHERE 子句的 DELETE 语句类似:但是,TRUNCATE TABLE 速度更快,使用的系统资源和事务日志资源更少.DELETE 语句每次删除一行,并在事务日志中为所删除的每行记录一项.TRUNCATE TABLE 通过释放存储表数据所用的数据页来删除数据,并且只在事务日志中记录页的释放. TRU

SQLite Expert 删除表数据并重置自动增长列

用下面的语句肯定是行不通的,语句不支持 truncate table t_Records 方法:1.删除表数据 delete from t_Records where 1==1 2.重置自动增长列 update sqlite_sequence set seq=0 where name='t_Records' /*name :是表名*/ SQLite Expert软件网址:  http://www.sqliteexpert.com/

oracle删除表数据的两种的方式

转自:https://blog.csdn.net/qq_37840993/article/details/82490787 平时写sql中我们都会用到删除语句,而平时删除表数据的时候我们经常会用到两种方式: 在oracle中,truncate.delete都可以删除表数据,具体的区别以及sql语法如下: truncate table [表名]; delete from [表名]; delete与truncate的区别:delete:会产生rollback,如果删除大数据量的表速度会很慢,而且同时