专注于 JetBrains IDEA 全家桶,永久激活,教程
持续更新 PyCharm,IDEA,WebStorm,PhpStorm,DataGrip,RubyMine,CLion,AppCode 永久激活教程

drop、truncate、delete还在傻傻分不清吗?

学习过mysql的都知道,我们删除表数据,删除表或者清空表的时候会使用删除语句去进行删除,在MySql中常用来删除语句有drop、truncate、delete,很多刚毕业的人去面试的时候面试官都会问到这个问题说一下这三个之间的区别,本编文章主要就是针对这三个点进行解释。

  • drop drop (删除表):删除内容和定义,释放空间,简单来说就是把整个表去掉,以后要新增数据是不可能的,除非新增一个表。 drop语句将删除表的结构被依赖的约束(constrain),触发器(trigger)索引(index),依赖于该表的存储过程/函数将被保留,但其状态会变为:invalid。 如果要删除表定义及其数据,请使用 drop table 语句。
drop table xxxx;     //xxxx 代指表名

  • truncate truncate (清空表中的数据):删除内容、释放空间但不删除定义(保留表的数据结构),与drop不同的是,只是清空表数据而已。 注意:truncate不能删除具体行数据,要删就要把整个表清空了。
truncate xxxx;      //xxxx 代指表名

  • delete delete (删除表中的数据):delete 语句用于删除表中的行。delete语句执行删除的过程是每次从表中删除一行,并且同时将该行的删除操作作为事务记录在日志中保存,以便进行进行回滚操作。
delete from xxxx where id = ? 

  • delete语句是数据库操作语言(dml),这个操作会放到 rollback segement 中,事务提交之后才生效;如果有相应的 trigger,执行的时候将被触发。
  • truncate、drop 是数据库定义语言(ddl),操作立即生效,原数据不放到 rollback segment 中,不能回滚,操作不触发 trigger。
  • 如果有自增列,truncate方式删除之后,自增列的值会被初始化,delete方式要分情况(如果数据库被重启了,自增列值也会被初始化,数据库未被重启,则不变),比如当前表的主键ID是递增的,使用truncate时候会从1重新开始。
  • 如果要删除表定义及其数据,请使用 drop table 语句
  • 安全性:小心使用 drop 和 truncate,尤其没有备份的时候,否则哭都来不及
  • 删除速度,一般来说: drop> truncate > delete
drop truncate delete
条件删除
删除表结构
触发器
事务的方式删除 不支持 不支持 支持

具体区别如上所示,如果有什么疑问,欢迎大家下方留言!

文章永久链接:https://tech.souyunku.com/27744

未经允许不得转载:搜云库技术团队 » drop、truncate、delete还在傻傻分不清吗?

JetBrains 全家桶,激活、破解、教程

提供 JetBrains 全家桶激活码、注册码、破解补丁下载及详细激活教程,支持 IntelliJ IDEA、PyCharm、WebStorm 等工具的永久激活。无论是破解教程,还是最新激活码,均可免费获得,帮助开发者解决常见激活问题,确保轻松破解并快速使用 JetBrains 软件。获取免费的破解补丁和激活码,快速解决激活难题,全面覆盖 2024/2025 版本!

联系我们联系我们