【MySQL】MySQL数据库的delete from table和truncate table之间的区别

本文涉及的产品
云数据库 RDS MySQL,集群版 2核4GB 100GB
推荐场景:
搭建个人博客
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云数据库 RDS MySQL,高可用版 2核4GB 50GB
简介: 【MySQL】MySQL数据库的delete from table和truncate table之间的区别


DELETE FROM tableTRUNCATE TABLE 是两种不同的数据库操作,用于从MySQL数据库的表中删除数据。它们有以下区别:


  1. 操作方式DELETE FROM table 是一种逐行删除的操作,它会逐个删除表中的每一行数据,并且可以带有条件进行过滤。而 TRUNCATE TABLE 操作是将整个表的内容一次性清空,相当于删除并重新创建一个空表。


  1. 效率TRUNCATE TABLE 操作通常比 DELETE FROM table 更高效。因为 DELETE FROM table 操作是逐行删除,每次删除都需要记录事务日志以支持回滚操作,同时还需要触发相关的触发器和外键约束。而 TRUNCATE TABLE 操作则直接释放表的存储空间,并且不记录日志,不触发触发器和外键约束。


  1. 权限要求DELETE FROM table 对于用户而言,需要有逐行删除数据的权限和足够的资源(磁盘空间、内存等)。而对于 TRUNCATE TABLE 操作,用户只需要拥有对应表的 TRUNCATE 权限即可。


  1. 保留结构DELETE FROM table 操作只删除表中的数据,不改变表的结构,包括表的元数据、索引、触发器等都会保留。而 TRUNCATE TABLE 操作会将表的结构、索引、触发器等都保留,只清空数据内容。


  1. 自增主键DELETE FROM table 操作在删除数据后,表中的自增主键仍然会继续递增。而 TRUNCATE TABLE 操作会重置自增主键,下一次插入数据时,自增主键从初始值开始。


综上所述,DELETE FROM tableTRUNCATE TABLE 在删除数据时有不同的行为和效果。


选择使用哪种操作取决于你的需求和对数据库资源消耗的考量。


如果只是需要删除数据而保留表的结构,且对性能要求较高,可以考虑使用 TRUNCATE TABLE 操作。


如果需要逐行删除数据或保留表的数据和结构的其他信息,可以使用 DELETE FROM table 操作。


另外,要删除整个表,可以使用MySQL的DROP TABLE语句。


DROP TABLE语句可以彻底删除数据库中的表,包括表的结构、数据、索引和触发器等。

相关实践学习
如何在云端创建MySQL数据库
开始实验后,系统会自动创建一台自建MySQL的 源数据库 ECS 实例和一台 目标数据库 RDS。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助     相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
目录
相关文章
|
4天前
|
存储 关系型数据库 MySQL
|
2天前
|
XML 关系型数据库 MySQL
支付系统----微信支付19---集成MyBatis-plus,数据库驱动对应的依赖版本设置问题,5没版本没有cj这个依赖,mysql驱动默认的是版本8,这里是一个父类,数据库都有,写个父类,继承就行
支付系统----微信支付19---集成MyBatis-plus,数据库驱动对应的依赖版本设置问题,5没版本没有cj这个依赖,mysql驱动默认的是版本8,这里是一个父类,数据库都有,写个父类,继承就行
|
2天前
|
Java 关系型数据库 MySQL
使用MySQL JDBC连接数据库
使用MySQL JDBC连接数据库
|
2天前
|
关系型数据库 MySQL 数据库
MybatisPlus添加数据数据库没有数据,数据消失,使用Navicate看不到数据,Navicate中Mysql的数据与idea的数据不一定同步,Navicate与idea的数据库同步,其实有分页
MybatisPlus添加数据数据库没有数据,数据消失,使用Navicate看不到数据,Navicate中Mysql的数据与idea的数据不一定同步,Navicate与idea的数据库同步,其实有分页
|
3天前
|
SQL 关系型数据库 MySQL
Navicate,数据库,Mysql,改表,4月29日Finished - Unsuccessfully,导出数据不妨,右键,备份一下Mysql数据库的内容,你想导入和导出数据不如,用查询的方式去做
Navicate,数据库,Mysql,改表,4月29日Finished - Unsuccessfully,导出数据不妨,右键,备份一下Mysql数据库的内容,你想导入和导出数据不如,用查询的方式去做
|
4天前
|
关系型数据库 MySQL Go
mysql,数据库Server returns invalid timezone. Go to ‘Advanced‘ tab 数据库的行和列没有出现怎么办p
mysql,数据库Server returns invalid timezone. Go to ‘Advanced‘ tab 数据库的行和列没有出现怎么办p
|
4天前
|
关系型数据库 MySQL 数据库连接
解决在eclipse2021中,用mysql-connector-java-8.0.18.jar不兼容,导致无法访问数据库问题
解决在eclipse2021中,用mysql-connector-java-8.0.18.jar不兼容,导致无法访问数据库问题
7 0
|
9天前
|
存储 关系型数据库 MySQL
|
9天前
|
存储 SQL 关系型数据库
|
4天前
|
XML Java 关系型数据库
Action:Consider the following: If you want an embedde ,springBoot配置数据库,补全springBoot的xml和mysql配置信息就好了
Action:Consider the following: If you want an embedde ,springBoot配置数据库,补全springBoot的xml和mysql配置信息就好了