【SQL】delete 与 truncate 命令的区别

区别

truncate delete
属于 DDL(数据定义语言) 范畴 属于 DML(数据操作语言) 范畴
删除表数据,不能删除视图数据 删除表数据,删除视图数据
只可以梭哈删除 通过 where 进行选择性删除
不涉及事务处理 删除表中数据涉及事务处理
效率高、但无法撤销 效率低,涉及事务考虑的就多
不能删除 foreign key 约束引用的表 按照一定的先后顺序可以删除相关表中的数据
是删除表再创建 是逐条删除
重置auto_increment的值 不会重置auto_increment的值
不知道删除了几条 delete知道
当被用于带分区的表时,truncate 会保留分区

写法

sql 复制代码
delete from students where age < 10
delete from students;

truncate table students;

使用场景

1、业务删除数据时、且数据量、性能可控的情况下,可以考虑使用 delete from xxx where 业务条件。

2、需要考虑事务提交、撤销的管理机制时,可以使用 delete

3、当需要删除大批量数据时,同时要求速度快,效率高并且无需撤销时,可以使用 truncate

4、在企业级开发中,实际上都是进行逻辑删除(将数据进行删除标识处理)、而并不进行物理上的删除

5、在实际企业开发、维护过程中,不管使用 delete 还是 truncate 命令前,都要考虑数据的备份

参考

【SQL】delete 与 truncate 命令的区别

相关推荐
BTU_YC4 小时前
Neo4j查询计划完全指南:读懂数据库的“执行蓝图“
数据库·neo4j
非极限码农4 小时前
Neo4j图数据库上手指南
大数据·数据库·数据分析·neo4j
mit6.8245 小时前
[C# starter-kit] 命令/查询职责分离CQRS | MediatR |
java·数据库·c#
苏打水com5 小时前
数据库进阶实战:从性能优化到分布式架构的核心突破
数据库·后端
莫叫石榴姐6 小时前
SQL百题斩:从入门到精通,一站式解锁数据世界
大数据·数据仓库·sql·面试·职场和发展
shan~~6 小时前
linux达梦数据库操作
linux·数据库·chrome
武文斌777 小时前
项目学习总结:LVGL图形参数动态变化、开发板的GDB调试、sqlite3移植、MQTT协议、心跳包
linux·开发语言·网络·arm开发·数据库·嵌入式硬件·学习
CoderIsArt7 小时前
SQLite架构
数据库·sqlite
lixora7 小时前
银河麒麟高级服务器操作系统(ADM64 版)V10(SP1)搭建 Oracle 19c RAC
数据库
郝学胜-神的一滴7 小时前
使用Linux的read和write系统函数操作文件
linux·服务器·开发语言·数据库·c++·程序人生·软件工程