drop table可以删除多张表吗_delete、truncate、drop 有啥区别?该怎么选择?
优质文章,及时送达
来源 | blog.csdn.net/qq_39390545/article/details/107144859
咱们常用的三种删除方式:通过 delete、truncate、drop 关键字进行删除;这三种都可以用来删除数据,但场景不同。
一、从执行速度上来说
drop > truncate >> DELETE
二、从原理上讲
1、DELETE
DELETE from TABLE_NAME where xxx
DELETE 属于数据库 DML 操作语言,只删除数据不删除表的结构,会走事务,执行时会触发 trigger;
在 InnoDB 中,DELETE 其实并不会真的把数据删除,mysql 实际上只是给删除的数据打了个标记为已删除,因此 delete 删除表中的数据时,表文件在磁盘上所占空间不会变小,存储空间不会被释放,只是把删除的数据行设置为不可见。虽然未释放磁盘空间,但是下次插入数据的时候,仍然可以重用这部分空间(重用 → 覆盖)。
DELETE 执行时,会先将所删除数据缓存到 rollback segement 中,事务 commit 之后生效;
delete from table_name 删除表的全部数据,对于 MyISAM 会立刻释放磁盘空间,InnoDB 不会释放磁盘空间;
对于 delete from table_name where xxx 带条件的删除,不管是 InnoDB 还是 MyISAM 都不会释放磁盘空间;
delete 操作以后使用 optimize table table_name 会立刻释放磁盘空间。不管是 InnoDB 还是 MyISAM 。所以要想达到释放磁盘空间的目的,delete 以后执行 optimize table 操作。
示例:查看表占用硬盘空间大小的 SQL 语句如下:(用 M 做展示单位,数据库名:csjdemo,表名:demo2)
select concat(round(sum(DATA_LENGTH/1024/1024),2),'M') as table_size from information_schema.tables where table_schema='csjdemo' AND table_name='demo2';
然后执行空间优化语句,以及执行后的表 Size 变化:
optimize table demo2
再看看这张表的大小,就只剩下表结构 size 了。
- delete 操作是一行一行执行删除的,并且同时将该行的的删除操作日志记录在 redo 和 undo 表空间中以便进行回滚(rollback)和重做操作,生成的大量日志也会占用磁盘空间。
2、truncate
Truncate table TABLE_NAME
- truncate:属于数据库 DDL 定义语言,不走事务,原数据不放到 rollback segment 中,操作不触发 trigger。
「执行后立即生效,无法找回」
truncate table table_name 立刻释放磁盘空间 ,不管是 InnoDB 和 MyISAM 。truncate table 其实有点类似于 drop table 然后 creat, 只不过这个 create table 的过程做了优化,比如表结构文件之前已经有了等等。所以速度上应该是接近 drop table 的速度;
truncate 能够快速清空一个表。并且重置 auto_increment 的值。
但对于不同的类型存储引擎需要注意的地方是:
1. 对于 MyISAM,truncate 会重置 auto_increment(自增序列)的值为 1。而 delete 后表仍然保持 auto_increment。
2. 对于 InnoDB,truncate 会重置 auto_increment 的值为 1。delete 后表仍然保持 auto_increment。但是在做 delete 整个表之后重启 MySQL 的话,则重启后的 auto_increment 会被置为 1。
也就是说,InnoDB 的表本身是无法持久保存 auto_increment。delete 表之后 auto_increment 仍然保存在内存,但是重启后就丢失了,只能从 1 开始。实质上重启后的 auto_increment 会从 SELECT 1+MAX (ai_col) FROM t 开始。
- 小心使用 truncate,尤其没有备份的时候,如果误删除线上的表,记得及时联系中国民航,订票电话:400-806-9553
3、drop
Drop table Tablename
- drop:属于数据库 DDL 定义语言,同 Truncate;
「执行后立即生效,无法找回」
drop table table_name 立刻释放磁盘空间 ,不管是 InnoDB 和 MyISAM; drop 语句将删除表的结构被依赖的约束 (constrain)、触发器 (trigger)、索引 (index); 依赖于该表的存储过程 / 函数将保留,但是变为 invalid 状态。
小心使用 drop ,要删表跑路的兄弟,请在订票成功后在执行操作!订票电话:400-806-9553
「可以这么理解,一本书,delete 是把目录撕了,truncate 是把书的内容撕下来烧了,drop 是把书烧了」
-END-
如果看到这里,喜欢这篇文章的话,请帮点个好看。微信搜索「一个优秀的废人」,关注后回复「 1024」送你一套完整的 java 教程(包括视频)。回复「 电子书」送你全编程领域电子书 (不只Java)。
drop table可以删除多张表吗_delete、truncate、drop 有啥区别?该怎么选择?相关推荐
- drop table可以删除多张表吗_python全球疫情分析,告诉你海外疫情到底有多严峻 | 附290行代码...
点击蓝字关注!设置星标!每天都有进步 作者:数据小斑马 | 数据分析师 CSDN博客专家 本文通过python,对全球疫情进行分析,除了总结疫情现状外,重点讲解 串联爬虫.数据库和数据分析的基础知识点 ...
- mysql 命令执行drop 命令_(笔记)Mysql命令drop table:删除数据表
drop table命令用于删除数据表. drop table命令格式:drop table ; 例如,删除表名为 MyClass 的表: mysql> drop table MyClass; ...
- Mysql命令drop table:删除数据表
drop table命令用于删除数据表. drop table命令格式:drop table ; 例如,删除表名为 MyClass 的表: mysql> drop table MyClass; ...
- Java连接HBASE数据库,创建一个表,删除一张表,修改表,输出插入,修改,数据删除,数据获取,显示表信息,过滤查询,分页查询,地理hash
准备工作 1.创建Java的Maven项目 创建好的目录结构如下: 另外注意junit的版本,最好不要太高,最开始笔者使用的junit4.12的,发现运行的时候会报错.最后把Junit的版本改成4.7 ...
- 只知道删除单张表的数据?不知道删除多张表的数据?
一些废话 可能在某某一天,你在删除表的数据的时候,不想一张表一张表的去删除,想把两个表的数据同时删除:然后你就会去搜索,然后你就很有很有很有很有可能会看到 me 的这篇优质(呸!!!)文章了~ 嗯,没 ...
- 表的插入、更新、删除、合并操作_20_通过表关联删除多张表
通过表关联删除多张表 需求描述 需求:删除dept表里deptno和temp相同的记录,但数据不可再恢复. 解决方法:这里通过DELETE FROM A,B FROM tableNAME A JOIN ...
- php删除一张表数据的时候 把另一张表的数据也删除,剔除第一张表的数据时,修改第二张表的相关字段的数值...
删除第一张表的数据时,修改第二张表的相关字段的数值 表xf xf_id vip total 1 1 10 2 1 100 3 2 80 4 3 50 表vip vip jifen 1 1000 2 5 ...
- delete from删除几张表关联和mysql几种连接查询总结
delete from删除几张表关联和mysql几种连接查询总结 一.delete from删除几张表关联 ① 在多表连接时删除数据(错误删除示例): delete from sys_role_men ...
- oracle 一次删除多张表
转载自:https://zhidao.baidu.com/question/184478164.html 1.首先要知道要删除的表名,写如下语句: select 'DROP TABLE'||TABLE ...
最新文章
- Btree(B-树)---C++
- android 根据文本计算行数,ios 获取Text行数和每行显示的内容
- 每天一个设计模式,工厂方法模式(Factory Method)
- java怎么调用存储函数_java中调用存储过程或存储函数的方法
- C语言再学习 -- printf、scanf占位符
- Sandy引擎学习笔记:摄影机
- Oracle GoldenGate 12c 新特性
- [jQuery基础] jQuery对象 -- CSS相关
- 求助下 Ubuntu 15.10(64 位)下安装 pyspider 下的问题 - V2EX
- 安工大计算机学院肖维民,安工大路由器实验报告.docx
- linux ll以编码格式_在Linux中文件的编码及对文件进行编码转换
- iphone圆点怎么弄出来_iPhone 秒变“坦克大战”游戏机,666!
- 2017年度优秀软件工程造价师等评选通知
- 解放双手,CSDN博客支持公众号自动同步!
- pq 中m函数判断嵌套_PowerQuery 进阶之 M 函数学习
- mybatis缓存引起的问题
- oracle 保留池,oracle的内存结构之--查看内存信息+保留池和循环池(摘自文平书)...
- Oculus/VR新手入门指南
- ZB级的大数据探索与应用实践【附PPT】
- NatureProtocols:使用MicrobiomeAnalyst统计和功能分析微生物组数据
热门文章
- [转]Git,SVN的优缺点及适合的范围,开源项目?公司项目?
- 华为机试HJ93:数组分组
- android定义 task,Android Gradle 自定义Task 详解
- mysql 文章 字段设计_在mysql数据库中,文章表设计有啥好的思路
- 鸿蒙会取代emui,华为称自家手机运行鸿蒙系统正在推进 未来会取代安卓吗?
- lua脚本移植到linux平台,如何将lua移植到arm平台的linux内核
- java和python和php_Java、Python和PHP三者的区别
- jbod ugood 磁盘驱动状态_NTFS磁盘读写工具Mounty免费版
- 盒子模型代码_果冻公开课第五课:五分钟理清盒模型的前世今生
- 做了8年软件测试的我,是如何从菜鸟快速成长为测试工程师的?