在MySQL中 Truncate Delect Drop 的区别
在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 的区别的更多相关文章
- oracle中delete、truncate、drop的区别
oracle中delete.truncate.drop的区别 标签: deleteoracletable存储 2012-05-23 15:12 7674人阅读 评论(0) 收藏 举报 分类: ora ...
- 用count(*)还是count(列名) || Mysql中的count()与sum()区别
Mysql中的count()与sum()区别 首先创建个表说明问题 CREATE TABLE `result` ( `name` varchar(20) default NULL, `su ...
- (转)MySQL中In与Exists的区别
背景:总结mysql相关的知识点. 如果A表有n条记录,那么exists查询就是将这n条记录逐条取出,然后判断n遍exists条件. select * from user where exists s ...
- MySQL中interactive_timeout和wait_timeout的区别【转】
在用mysql客户端对数据库进行操作时,打开终端窗口,如果一段时间没有操作,再次操作时,常常会报如下错误: ERROR 2013 (HY000): Lost connection to MySQL s ...
- Mysql中函数和存储过程的区别
Mysql中函数和存储过程的区别 存储过程: 1. 可以写sql语句 2. inout,out构造返回值 3. 调用:call:存储过程名称 4. 可以 ...
- MySQL中truncate误操作后的数据恢复案例
MySQL中truncate误操作后的数据恢复案例 这篇文章主要介绍了MySQL中truncate误操作后的数据恢复案例,主要是要从日志中定位到truncate操作的地方然后备份之前丢失的数据,需要的 ...
- mysql中in和exist的区别
mysql中in和exists的区别 -- in写法select * from A where A.id in (select bid from B ) and A.name in (select ...
- MySQL中 utf8与utf8mb4的区别
MySQL中 utf8与utf8mb4的区别 一.简介 MySQL在5.5.3之后增加了这个utf8mb4的编码,mb4就是most bytes 4的意思,专门用来兼容四字节的unicode.好在 ...
- mysql中的delete , drop 和truncate 区别
1.delete 和 truncate 仅仅删除表数据,drop 连表数据和表结构一起删除,打个比方,delete 是单杀,truncate 是团灭,drop 是把电脑摔了. 2.delete 是 D ...
- Mysql中truncate table和delete语句的区别
Mysql中的truncate table和delete语句都可以删除表里面所有数据,但是在一些情况下有些不同! 例子: truncate table gag; (1)truncate table删除 ...
随机推荐
- pwn杂项之linux命令执行
通常pwn题目,时常会考到对Linux命令的一些使用,比如当cat被禁用的时候,可以使用tac,或者别的命令代替 下面是buu上的应该题目,考察的就是对liunx命令的理解,以及对程序的分析. 题目地 ...
- MySQL学习笔记-多表查询(上)
多表查询(上) 一. 多表关系 在实际应用中,根据需求,设计的表结构之间存在联系,联系一般分为以下三种 一对多(多对一) 多对多 一对一 1. 一对多(多对一) 案例:部门与员工的关系,一个部门对应多 ...
- 搭建单机版伪分布式Hadoop+Scala+spark
搭建单机版伪分布式Hadoop+Scala+spark 修改ip [root@master ~]# nmcli connection add ifname ens32 con-name ens32 a ...
- Centos7安装Nginx教程,一步安装http和https
nginx是一款轻量级web服务器,主要有负载均衡和反向代理的特性. 安装准备 nginx一些模块需要依赖lib库,所以先安装lib库,执行以下命令: [root@localhost local]# ...
- Android Media Framework(三)OpenMAX API阅读与分析
这篇文章我们将聚焦Control API的功能与用法,为实现OMX Core.Component打下坚实的基础. 1.OMX_Core.h OMX Core在OpenMAX IL架构中的位置位于IL ...
- C#.NET 读取PFX私钥证书并导出PEM格式私钥
项目nuget引用 BouncyCastle. 读取证书 X509Certificate2 x509 = new X509Certificate2(lblPfxPath.Text, txtPfxPwd ...
- 直播预告|把握转型浪潮下的机会,甄知科技教你保姆级IT服务管理
近年来,5G.云计算.大数据.物联网.区块链.人工智能等新兴技术不断在企业中协同发展应用,推动着企业的数字化程度逐步加深.自新冠疫情发生以来,企业的远程服务.服务自助等服务需求激增,企业数字化转型需求 ...
- 在Ubuntu系统安装Anaconda及Python
本文介绍在Linux Ubuntu操作系统的电脑中,安装Anaconda环境与Python语言的方法. 在之前的文章Anaconda与Python环境在Windows中的部署中,我们介绍了在W ...
- 05-CentOS防火墙
概述 CentOS中的防火墙有很多,如SELinux.Firewall.TCP Wrappers.iptables/netfilter. 每种防火墙都有各自擅长的地方. 这里主要讲两种:SELinux ...
- 安装PHP5.6.20
安装php的前提是安装了数据库和httpd!!!!!!!! 1 因为yum缺省安装的是PHP5.4,所以先要添加yum库 [root@svnhost ~]# rpm -Uvh https://mirr ...