文档章节

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

robortly
 robortly
发布于 2015/05/05 10:39
字数 624
阅读 119
收藏 4

在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

© 著作权归作者所有

共有 人打赏支持
robortly
粉丝 8
博文 76
码字总数 45614
作品 0
深圳
技术主管
私信 提问
加载中

评论(1)

betty小雅
betty小雅
老师:
您好!
我是源智天下有限公司的图书编辑,公司诚聘兼职作者,撰写开发方面的书籍,版权和署名都归作者所有,提升您的知名度和个人影响力,流程我们带你完成,你只要在一定的时间内完成一定的内容即可,感兴趣的话可以详谈:2917227785或者3174229616,期待与您的合作!
mysql中delete table和truncate table的区别

delete from 表名; truncate table 表名; 不带where参数的delete语句可以删除mysql表中所有内容,使用truncate table也可以清空mysql表中所有内容。 效率上truncate比delete快,但truncate删...

issac宝华
2016/03/14
52
0
Mysql清空表(truncate)与删除表中数据(delete)的区别

为某基于wordpress搭建的博客长久未除草,某天升级的时候发现已经被插入了几万条垃圾留言,如果一条条删除那可真是累人的活。遂考虑直接进入mysql直接清空表或者删除表中数据。 本文记录一下...

三奇
01/18
0
0
Mysql中常用操作(密码破解、数据库备份、数据库导入、授权)

修改表的编码方式: 修改字段的编码方式: 更改表的引擎: 刷新权限: 授权: Mysql密码修改/破解 输入这个命令后,需要输入root的原密码,然后root的密码将改为mypasswd。 2.MySQL 忘记口令...

殘留回憶
2017/12/06
0
0
MySQL学习笔记(一)

一、数据库简单介绍 1、 按照数据库的发展时间顺序,主要出现了以下类型数据库系统: 网状型数据库 层次型数据库 关系型数据库 面向对象数据库 上面4中数据库系统中,关系型数据库使用最为广...

ws199358
2016/09/08
11
0
Mysql TRUNCATE 和 DELETE 清空表操作的区别

本质: TRUNCATE 是 DDL(数据定义语言), DELETE 是 DML(数据操作语言) 所以 truncate 操作是无法在事务中回滚的,但 delete 在事务上下文中在 commit 前是可以回滚 常见的 DDL 命令还有...

big_cat
2016/01/29
167
0

没有更多内容

加载失败,请刷新页面

加载更多

CentOS7.4 搭建 ss

一键安装 shadowsocks-go 版 wget –no-check-certificate https://raw.githubusercontent.com/teddysun/shadowsocks_install/master/shadowsocks-go.sh chmod +x shadowsocks-go.sh ./s......

YunOu
6分钟前
0
0
Spark Streaming整合kafka实战

kafka作为一个实时的分布式消息队列,实时的生产和消费消息,这里我们可以利用SparkStreaming实时计算框架实时地读取kafka中的数据然后进行计算。在spark1.3版本后,kafkaUtils里面提供了两个...

hblt-j
7分钟前
0
0
vue组件中的样式属性scoped实例

vue组件中的style标签标有scoped属性时表明style里的css样式只适用于当前组件元素 。接下来通过本文给大家分享vue组件中的样式属性scoped实例详解 **Scoped CSS** Scoped CSS规范是Web组件产...

前端攻城老湿
22分钟前
0
0
ios 面试部分整理

assign weak区别 assign不是有崩溃的风险么 strong和copy 对非容器类可变类型 非容器类不可变 容器类可变容器类不可变 进行深拷贝浅拷贝有什么区别 什么样的对象可以进行拷贝 就是这个NScod...

大魔王周晓辉
23分钟前
0
0
浅谈教你如何掌握Linux系统

linux能做什么?相信绝大数人都有这样的疑问。可以玩吃鸡吗?可以玩lol吗? 如果你是以娱乐的名义来评价linux的可用性,对不起,linux可能不适合你,因为linux是一个工具,他是教你聪明的,不...

Linux就该这么学
23分钟前
0
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部