在MySQL中 Truncate Delect Drop 的区别


面试问题:

--

-- 请详细描述MySQL中TRUNCATE TABLE、DELETE FROM和DROP TABLE三个命令的区别,包括它们的作用、性能影响、事务日志的生成以及对表结构和触发器的影响。

--

-- 回答:

--

-- 在MySQL中,TRUNCATE TABLE、DELETE FROM和DROP TABLE是三个用于管理数据库表的重要命令,它们之间在多个方面存在显著差异:

--

-- 作用:

-- TRUNCATE TABLE:此命令用于删除表中的所有行,但保留表本身的结构(包括索引、列定义等)和属性。它不激活DELETE触发器,并且操作通常不能被回滚。

-- DELETE FROM:该命令用于根据条件删除表中的一行或多行。如果没有指定条件,则删除所有行。DELETE会激活表的DELETE触发器,并且操作可以被回滚。

-- DROP TABLE:此命令用于删除整个表及其所有内容,包括结构、索引、数据和权限等。一旦执行,表将不再存在于数据库中,且此操作通常也不能被回滚。

-- 性能影响:

-- TRUNCATE TABLE:通常比DELETE更快,因为它不逐行删除数据,而是重置表并释放空间。它产生的日志较少,因为它不记录每行删除的详细日志。

-- DELETE FROM:可能相对较慢,尤其是当删除大量行且启用了事务和回滚功能时。它会逐行删除数据,并可能记录每行删除的日志。

-- DROP TABLE:在删除整个表时,通常比DELETE或TRUNCATE更快,因为它不涉及逐行处理。

-- 事务日志的生成:

-- TRUNCATE TABLE:通常产生的日志较少,因为它不逐行删除数据,而是直接重置表。

-- DELETE FROM:会记录详细的日志,以便在需要时可以回滚操作。

-- DROP TABLE:记录的是表删除的操作,而不是行级别的删除。

-- 对表结构和触发器的影响:

-- TRUNCATE TABLE:保留表结构,但不激活DELETE触发器。

-- DELETE FROM:不改变表结构,但会激活DELETE触发器(如果已定义)。

-- DROP TABLE:删除整个表,包括其结构、索引和触发器。

-- -- 综上所述,选择哪个命令取决于具体的需求和场景。如果需要快速清空表中的所有数据而不保留事务日志,且不关心触发器,则TRUNCATE TABLE是最佳选择。如果需要基于条件删除数据,并可能需要回滚操作,则DELETE FROM更适合。如果需要彻底删除整个表及其所有内容,则DROP TABLE是正确的选择。

在MySQL中 Truncate Delect Drop 的区别的更多相关文章

  1. oracle中delete、truncate、drop的区别

    oracle中delete.truncate.drop的区别 标签: deleteoracletable存储 2012-05-23 15:12 7674人阅读 评论(0) 收藏 举报  分类: ora ...

  2. 用count(*)还是count(列名) || Mysql中的count()与sum()区别

    Mysql中的count()与sum()区别   首先创建个表说明问题 CREATE TABLE `result` (   `name` varchar(20) default NULL,   `su ...

  3. (转)MySQL中In与Exists的区别

    背景:总结mysql相关的知识点. 如果A表有n条记录,那么exists查询就是将这n条记录逐条取出,然后判断n遍exists条件. select * from user where exists s ...

  4. MySQL中interactive_timeout和wait_timeout的区别【转】

    在用mysql客户端对数据库进行操作时,打开终端窗口,如果一段时间没有操作,再次操作时,常常会报如下错误: ERROR 2013 (HY000): Lost connection to MySQL s ...

  5. Mysql中函数和存储过程的区别

    Mysql中函数和存储过程的区别 存储过程: 1.       可以写sql语句 2.       inout,out构造返回值 3.       调用:call:存储过程名称 4.       可以 ...

  6. MySQL中truncate误操作后的数据恢复案例

    MySQL中truncate误操作后的数据恢复案例 这篇文章主要介绍了MySQL中truncate误操作后的数据恢复案例,主要是要从日志中定位到truncate操作的地方然后备份之前丢失的数据,需要的 ...

  7. mysql中in和exist的区别

    mysql中in和exists的区别 -- in写法select * from A where A.id in (select bid from  B ) and A.name in (select ...

  8. MySQL中 utf8与utf8mb4的区别

    MySQL中 utf8与utf8mb4的区别 一.简介 ​ MySQL在5.5.3之后增加了这个utf8mb4的编码,mb4就是most bytes 4的意思,专门用来兼容四字节的unicode.好在 ...

  9. mysql中的delete , drop 和truncate 区别

    1.delete 和 truncate 仅仅删除表数据,drop 连表数据和表结构一起删除,打个比方,delete 是单杀,truncate 是团灭,drop 是把电脑摔了. 2.delete 是 D ...

  10. Mysql中truncate table和delete语句的区别

    Mysql中的truncate table和delete语句都可以删除表里面所有数据,但是在一些情况下有些不同! 例子: truncate table gag; (1)truncate table删除 ...

随机推荐

  1. Pandas学习之路【2】

    Pandas数据查询的5种方法: 数据准备: import pandas as pd path = 'C:\\Users\\zhang\\Desktop\\ant-learn-pandas-maste ...

  2. 算法金 | 突破最强算法模型!!学会随机森林,你也能发表高水平SCI

    大侠幸会,在下全网同名「算法金」 0 基础转 AI 上岸,多个算法赛 Top 「日更万日,让更多人享受智能乐趣」 就在去年下半年,如果你在 Google Scholar 上以 "Random ...

  3. 基本定时器TIM6实现精确延时

    1.基本定时器的特点 (1).16位自动重装载累加计数器 (2).16位可编程(可实时修改)预分频器,用于对输入的时钟按系数为1-65536之间的任意数值 !!!注意基本定时器只有向上计数模式,不要被 ...

  4. 纯css+html做emoji动态表情

    <!DOCTYPE html> <html lang="zh-CN"> <head> <meta charset="UTF-8& ...

  5. kvm链接克隆虚拟机迁移到openstack机器的实验

    总结 如果是完整克隆的那种虚拟机,是可以直接在openstack使用的,如果镜像格式没问题的话. 因为kvm虚拟机大部分都是链接克隆出来的镜像,不可用直接复制使用,所以需要创建新的镜像文件 创建空盘: ...

  6. 别想宰我,怎么查看云厂商是否超卖?详解 cpu steal time

    据说有些云厂商会超卖,宿主有 96 个核心,结果卖出去 100 多个 vCPU,如果这些虚机负载都不高,大家相安无事,如果这些虚机同时运行一些高负载的任务,相互之间就会抢占 CPU,对应用程序有较大影 ...

  7. Scrapy框架(二)--持久化存储

    持久化存储 scrapy的高性能持久化存储操作,有两种方式:基于终端指令的持久化存储 和 基于管道的持久化存储操作. 基于终端指令的持久化存储 保证爬虫文件的parse方法中有可迭代类型对象(通常为列 ...

  8. 接口加密传输设计及AES加解密代码DEMO

    接口加密传输设计及AES加解密代码DEMO 接口加密的方案设计:可以将请求的json字符串aes加密,通过params字段传输,接口服务端接收到参数,先解密,然后转换成对象.继续业务逻辑的处理.(另外 ...

  9. gradle打包命令含离线模式

    gradle打包命令gradlew clean 清理gradlew clean build -x test --refresh-dependencies 离线方式: gradlew --offline ...

  10. Python 潮流周刊#56:NumPy 2.0 里更快速的字符串函数(摘要)

    本周刊由 Python猫 出品,精心筛选国内外的 250+ 信息源,为你挑选最值得分享的文章.教程.开源项目.软件工具.播客和视频.热门话题等内容.愿景:帮助所有读者精进 Python 技术,并增长职 ...