MySQL删除数据的三种方式

本文涉及的产品
云数据库 RDS MySQL Serverless,0.5-2RCU 50GB
简介: 花一分钟,说说使用truncate与delete批量删除数据的异同。

image.png

行数据批量delete时,InnoDB如何处理自增ID的?
这里有一个潜在的大坑。

image.png

整个实验步骤如上图:

第一步:建表,设定自增列;
第二步:指定id=1插入,锚定第一行是id是1;
第三步:不指定id,依赖自增机制,插入3行;画外音:此时id应该变为2,3,4了?
第四步:delete删除所有记录;画外音:坑就容易出在这里。
第五步:指定id=0插入;
第六步:指定id=1插入;
第七步:不指定id,依赖自增机制,插入1行;
请问,此时表中的三行记录,id分别是多少?
是否符合大家的预期?

今天花1分钟,说说使用truncate与delete批量删除数据的异同。

批量删除数据有三种常见的方法:

(1) drop table:当不需要该表时,可以使用该方法。

(2) truncate table:删除所有数据,同时保留表,速度很快。

画外音:可以理解为,drop table然后再create table。

(3) delete from table:可以删除所有数据,也能保留表,但性能较差。也可以带where条件删除部分数据,灵活性强。

虽然truncate和delete都能够删除所有数据,且保留表,但他们之间是有明显差异的。

(1)

truncate是DDL语句,它不存在所谓的“事务回滚”;
delete是DML语句,它执行完是可以rollback的。
(2)

truncate table返回值是0;
delete from table返回值是被删除的行数。
(3) InnoDB支持一个表一个文件,此时:

truncate会一次性把表干掉,且不会激活触发器,速度非常快;
delete from table则会一行一行删除,会激活触发器,速度比较慢。
画外音:delete数据,是要记录日志的,truncate表不需要记录日志。

(4) 当表中有列被其它表作为外键(foreign key)时:

truncate会是失败;
delete则会成功。
画外音:这类数据删除失败很容易定位问题,因为报错提示简单易懂。

(5) 当表中有自增列时:

truncate会使得自增列计数复原;
delete所有数据后,自增列计数并不会从头开始。
画外音:因此,delete所有数据后,自增列计数的这个行为,往往不是用户想要的,所以是一个潜在坑。

这一分钟,有收获吗?

请根据自己的业务场景,选择删除数据的方式哟。

相关实践学习
基于CentOS快速搭建LAMP环境
本教程介绍如何搭建LAMP环境,其中LAMP分别代表Linux、Apache、MySQL和PHP。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助     相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
相关文章
|
7月前
|
存储 关系型数据库 MySQL
mysql添加和删除数据库以及数据类型
mysql添加和删除数据库以及数据类型
76 1
|
5月前
|
SQL 关系型数据库 MySQL
MySQL删除数据后磁盘空间的释放总结
MySQL删除数据后磁盘空间的释放总结
239 0
|
1月前
|
关系型数据库 MySQL
Mysql基础第二十三天,更新和删除数据
Mysql基础第二十三天,更新和删除数据
18 0
Mysql基础第二十三天,更新和删除数据
|
2月前
|
关系型数据库 MySQL 数据库
mysql如何正确的删除数据(drop,delete,truncate)
mysql如何正确的删除数据(drop,delete,truncate)
36 0
|
7月前
|
关系型数据库 MySQL 数据库
在MySQL数据库中插入、更新与删除数据
在MySQL数据库中插入、更新与删除数据。
62 2
|
3月前
|
关系型数据库 MySQL 数据库
MySQL数据库-多表关联删除数据
MySQL数据库-多表关联删除数据
20 1
|
3月前
|
SQL 关系型数据库 MySQL
MySQL新增数据,修改数据,删除数据
MySQL新增数据,修改数据,删除数据
|
4月前
|
SQL 关系型数据库 MySQL
MySQL 删除数据表
MySQL中删除数据表是非常容易操作的,但是你在进行删除表操作时要非常小心,因为执行删除命令后所有数据都会消失。
|
4月前
|
关系型数据库 MySQL PHP
MySQL 删除数据库
MySQL 删除数据库
|
4月前
|
SQL 存储 关系型数据库
③【操作表数据】MySQL添加数据、修改数据、删除数据
③【操作表数据】MySQL添加数据、修改数据、删除数据
35 0