myql的三种删除方式:delete truncate drop

这篇具有很好参考价值的文章主要介绍了myql的三种删除方式:delete truncate drop。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

前言

在 MySQL 中,删除的方法总共有 3 种:delete、truncate、drop,而三者的用法和使用场景又完全不同,接下来我们具体来看。

1.delete

detele 可用于删除表的部分或所有数据,它的使用语法如下:

delete from table_name [where...] [order by...] [limit...]

PS:[] 中的命令为可选命令,可以被省略。
如果我们要删除学生表中数学成绩排名最高的前 3 位学生,可以使用以下 SQL:

delete from student order by math desc limit 3;

1.1 delete 实现原理

在 InnoDB 引擎中,delete 操作并不是真的把数据删除掉了,而是给数据打上删除标记,标记为删除状态,这一点我们可以通过将 MySQL 设置为非自动提交模式,来测试验证一下。非自动提交模式的设置 SQL 如下:

set autocommit=0;

之后先将一个数据 delete 删除掉,然后再使用 rollback 回滚操作,最后验证一下我们之前删除的数据是否还存在,如果数据还存在就说明 delete 并不是真的将数据删除掉了,只是标识数据为删除状态而已,验证 SQL 和执行结果如下图所示:
myql的三种删除方式:delete truncate drop

1.2 关于自增列

在 InnoDB 引擎中,使用了 delete 删除所有的数据之后,并不会重置自增列为初始值,我们可以通过以下命令来验证一下:
myql的三种删除方式:delete truncate drop

2.truncate

truncate 执行效果和 delete 类似,也是用来删除表中的所有行数据的,它的使用语法如下:

truncate [table] table_name

truncate 在使用上和 delete 最大的区别是,delete 可以使用条件表达式删除部分数据,而 truncate 不能加条件表达式,所以它只能删除所有的行数据,比如以下 truncate 添加了 where 命令之后就会报错:
myql的三种删除方式:delete truncate drop

2.1 truncate 实现原理

truncate 看似只删除了行数据,但它却是 DDL 语句,也就是 Data Definition Language 数据定义语言,它是用来维护存储数据的结构指令,所以这点也是和 delete 命令是不同的,delete 语句属于 DML,Data Manipulation Language 数据操纵语言,用来对数据进行操作的。为什么 truncate 只是删除了行数据,没有删除列数据(字段和索引等数据)却是 DDL 语言呢?这是因为 truncate 本质上是新建了一个表结构,再把原先的表删除掉,所以它属于 DDL 语言,而非 DML 语言。
2.2 重置自增列
truncate 在 InnoDB 引擎中会重置自增列,如下命令所示:
myql的三种删除方式:delete truncate drop

3.drop

drop 和前两个命令只删除表的行数据不同,drop 会把整张表的行数据和表结构一起删除掉,它的语法如下:

DROP [TEMPORARY] TABLE [IF EXISTS] tbl_name [,tbl_name]

其中 TEMPORARY 是临时表的意思,一般情况下此命令都会被忽略。
drop 使用示例如下:
myql的三种删除方式:delete truncate drop

三者的区别
数据恢复方面:delete 可以恢复删除的数据,而 truncate 和 drop 不能恢复删除的数据。
执行速度方面:drop > truncate > delete。
删除数据方面:drop 是删除整张表,包含行数据和字段、索引等数据,而 truncate 和 drop 只删除了行数据。
添加条件方面:delete 可以使用 where 表达式添加查询条件,而 truncate 和 drop 不能添加 where 查询条件。
重置自增列方面:在 InnoDB 引擎中,truncate 可以重置自增列,而 delete 不能重置自增列。

总结

delete、truncate 可用于删除表中的行数据,而 drop 是把整张表全部删除了,删除的数据包含所有行数据和字段、索引等数据,其中 delete 删除的数据可以被恢复,而 truncate 和 drop 是不可恢复的,但在执行效率上,后两种删除方式又有很大的优势,所以要根据实际场景来选择相应的删除命令,当然 truncate 和 drop 这些不可恢复数据的删除方式使用的时候也要小心。文章来源地址https://www.toymoban.com/news/detail-444958.html

到了这里,关于myql的三种删除方式:delete truncate drop的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • kafka删除topic消息的三种方式

    kafka删除topic消息的三种方式 方法一:快速配置删除法(确保topic数据不要了) 1.kafka启动之前,在server.properties配置delete.topic.enable=true 2.执行命令bin/kafka-topics.sh --delete --topic test --zookeeper zk:2181或者使用kafka-manager集群管理工具删除 注意:如果kafka启动之前没有配置delete.topic.e

    2024年02月16日
    浏览(39)
  • java删除文件或目录的三种方法

    传统删除是利用IO流,本文利用NIO流实现。 代码如下(示例): 代码如下(示例): 代码如下(示例): 利用NIO流的好处: 1.如果删除失败,可以给出错误的具体原因; 2.代码不多,效率高。

    2024年02月10日
    浏览(62)
  • Debezium的三种部署方式

    debezium 有下面三种部署方式,其中最常用的就是 kafka connect。 kafka connect 一般情况下,我们通过 kafka connect 来部署 debezium,kafka connect 是一个框架和运行时: source connectors:像 debezium 这样将记录发送到 kafka 的source connector sink connectors:将记录从 kafka topic传播到其他系统的 sin

    2024年02月10日
    浏览(43)
  • 生成DLL的三种方式

    生成DLL的三种方式 1. 用命令行完成dll的新建与调用 2. 在VS中生成dll文件 首先需要cl编译器以及link连接器来完成后续操作。 新建一个dll_demo.cpp文件 ,此文件中的函数是我们想要封装成dll的函数。用写字板创建一个新的文件,文件名可自己选择(这里创建一个dll_demo),文件后

    2024年02月04日
    浏览(75)
  • 验证合约的三种方式

    使用truffle插件: https://github.com/rkalis/truffle-plugin-verify truffle run verify 合约名称@合约地址 --network 网络名称 --debug 注意:需要开启VPN,然后给CMD也设置代理,否则CMD无法访问外网会验证失败 (每次新开CMD都要执行) 在etherscan上手动上传 1、合约文件如果有导入的外部合约,需

    2023年04月22日
    浏览(56)
  • 线程创建的三种方式

    目录 1. Thread类 2. Runnable接口 3. Callable接口 4. 线程的生命周期 新建  就绪 运行 阻塞 等待 结束 继承Thread类的方式创建线程 定义Thread类的子类,并重写该类的run()方法,该run()方法的方法体就代表了线程需要完成的任务 创建Thread类的子类,即创建了线程对象 调用线程对象的

    2024年02月09日
    浏览(42)
  • Servlet的三种映射方式

    Servlet支持三种映射方式,以达到灵活配置的目的。 首先先创建Servlet(创建方式略),然后再web.xml中就行配置。 配置方式:         (1)、 指名道姓的方式         注:此种方式,只有和映射配置一模一样时,Servlet才会接收和响应来自客户端的请求。 示例:         (

    2024年02月06日
    浏览(44)
  • 解决NPE的三种方式

    NullPointerException(空指针异常,NPE)是Java编程中常见的错误。解决NPE的方法可以从以下三个方面考虑: 明确处理空引用情况: 在某些情况下,无法避免使用可能为空的引用对象。此时,需要明确处理空引用情况,以避免抛出NPE。可以使用条件判断,例如使用if-else语句或者三

    2024年02月22日
    浏览(52)
  • 集合的三种遍历方式

    目录 文章目录 一.迭代器遍历 二.增强for遍历 三. forEach方法 四. Lambda表达式  函数式接口: 函数式接口是指只有一个抽象方法的接口 为什么Lambda只能用于函数式接口 总结 前言 作者简介:最爱吃兽奶 座右铭:抱怨身处黑暗,不如提灯前行 内容介绍:今天给大家讲一下集合的遍历方

    2024年02月06日
    浏览(43)
  • selenium的三种等待方式

    设置固定休眠时间,单位为秒。 由python的time包提供, 导入 time 包后就可以使用。 缺点:不智能,使用太多的sleep会影响脚本运行速度。 使用方法:time.sleep(delay) 使用举例:打开百度,强制等待5秒 (无条件等待,在一个时间段内等待) 一次设置,全局生效。 不要当作固定等待

    2023年04月13日
    浏览(47)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包