语法:

删表

DROP TABLE Syntax
DROP [TEMPORARY] TABLE [IF EXISTS]
tbl_name [, tbl_name] ...
[RESTRICT | CASCADE]

可一次删除一张或多张表。需具有所删除表上的DROP权限。

表定义文件和数据文件均被移除。表被删除后表上的用户权限不会被自己主动删除。

參数里表中指定的表名不存在则报错,但对于存在的表仍会删除。可通过指定IF EXISTS阻止表不存在时引发的错误(此时对于不存在的表仅产生一个NOTE)。对于分区表。除了移除表定义,分区、数据外还移除与之关联的分区定义文件(.par)。

在MySQL5.6中參数[RESTRICT | CASCADE]不做不论什么事情。

[TEMPORARY]
keyword表明仅仅删暂时表,语句不会结束正在进行的事务(MySQL中DDL语句会隐式提交)。不会进行权限检查。

删库

DROP DATABASE Syntax
DROP {DATABASE | SCHEMA} [IF EXISTS] db_name...

删除指定库中的表之后删除库。需具有库上的DROP权限。

库被删除后库上存在的用户权限不会被自己主动删除。IF EXISTS用于阻止库名不存在时引起的错误。库被删除后默认库会被重置。

若在使用了符号链接的库上运行DROP DATABASSE 链接和原始数据库都会被删除。命令返回被移除的表数量。

该命令会从指定的数据库文件夹中移除常规操作时MySQL自己产生的文件和文件夹。如:.BAK .DAT .HSH .MRG. MYD .MYI .TRG .TRN .db.frm
.ibd .ndb .par,若存在db.opt也相同会删除。若数据库文件夹中存在其它非MySQL本身产生的文件或文件夹。则整个数据库文件夹不会被移除。此时,需手动清理剩余的文件并又一次执行DROP DATABASE语句。

删除数据库并不会移除库中创建的暂时表。暂时表在SESSION结束时自己主动被清理或者显示的通过DROP TEMPORARY TABLE 删除。



删除大表的注意事项

对于表的删除。由于InnoDB引擎会在table cache层面维护一个全局独占锁一直到DROP TABLE完毕为止。这样。对于表的其它操作会被HANG住。对于较大的表来说,DROP TABLE操作可能须要非常长的时间。因此须要一种有效的办法来提升大表的删除速度,以尽可能减少HANG住的时间。能够通过设置硬链接来达到此目的。

比方有一个例子表:

example_table



使用InnoDB引擎且指定innodb_file_per_table=ON时在数据文件夹中与该表相应的有例如以下两个文件。分别为表定义文件和数据文件。

sudo ls  -lh /data/mysql/testdb
-rw-rw---- 1 mysql mysql 8.4K Oct 28 13:26 example_table.frm
-rw-rw---- 1 mysql mysql 100G Oct 28 13:26 example_table.ibd

该表有100G这么大。直接使用DROP TABLE来完毕删表动作,那么这条语句要运行非常长时间。此时便能够通过在该表相应的数据文件上设置硬链接来进行删除。

sudo ln /data/mysql/testdb/example_table.ibd /data/mysql/testdb/example_table.ibd.hdlk
sudo ls -lh /data/mysql/testdb
-rw-rw---- 1 mysql mysql 8.4K Oct 28 13:26 example_table.frm
-rw-rw---- 2 mysql mysql 100G Oct 28 13:26 example_table.ibd
-rw-rw---- 2 mysql mysql 100G Oct 28 13:26 example_table.ibd.hdlk

发现多了一个example_table.ibd.hdlk文件,且example_table.ibd.hdlk和example_table.ibd的innode均为2。也即当有多个文件名称(如硬链接)指向同一innode时,这个innode的引用数大于1。此时,删除当中不论什么一个文件名称都仅仅会删除指向innode的指针而并不会直接删除物理文件块。因此会很快。直至innode的引用计数等于1时才会真正删除相应的物理文件块。真正删除物理文件块时才会比較耗时。

在建立了硬链接后再运行DROP TABLE操作:

DROP TABLE example_table;

发现会非常快的完毕。查看相应的表定义和数据文件:

sudo ls  -lh /data/mysql/testdb
-rw-rw---- 1 mysql mysql 100G Oct 28 13:26 example_table.ibd.hdlk

仅仅剩下example_table.ibd.hdlk,且innode的引用计数变为了1。

也即刚才的DROP TABLE操作实施删除了物理文件的一个指针example_table.ibd ,因而很快。

剩下的任务就是删除真正的物理文件了,由于此时innode的引用计数已经变为了1。直接删除example_table.ibd.hdlk便会真正的删除物理文件。

但由于物理文件较大。删除大文件仍会引起较高的磁盘IO开销。

因此能够使用少量逐次删除的方式来删除大的数据文件。truncate工具能够用于添加或缩减指定文件的尺寸,能够用于此目的:

for i in `seq 100 -1 1 ` ;do sleep 2;sudo truncate -s ${i}G /data/mysql/testdb/example_table.ibd.hdlk;done
sudo rm -rf /data/mysql/testdb/example_table.ibd.hdlk;

从100G開始。每次缩减1G,停2秒,继续,直到文件仅仅剩1G,最后使用rm命令删除剩余的部分。

对于整个数据库的删除能够先删除当中较大的表。最后在运行DROP DATABASE删除整个库。对大表的删除可參见上面的方法。

MySQL DROP TABLE操作以及 DROP 大表时的注意事项的更多相关文章

  1. MySQL DROP TABLE操作以及 DROP 大表时的注意事项【转】

    删表 DROP TABLE Syntax DROP [TEMPORARY] TABLE [IF EXISTS] tbl_name [, tbl_name] ... [RESTRICT | CASCAD ...

  2. MySQL DROP 大表时的注意事项

    对于表的删除,因为InnoDB引擎会在table cache层面维护一个全局独占锁一直到DROP TABLE完成为止,这样,对于表的其他操作会被HANG住.对于较大的表来说,DROP TABLE操作可 ...

  3. MySQL删除大表时潜在的问题(drop table,truncate table)

    来源于:https://www.cnblogs.com/CtripDBA/p/11465315.html,侵删,纯截图,避免吸引流量之嫌 case1,删除大表时,因为清理自适应hash索引占用的内容导 ...

  4. 【原创】Innodb中mysql如何快速删除2T的大表

    小漫画 来,先来看小漫画陶冶一下情操 OK,这里就说了.假设,你有一个表erp,如果你直接进行下面的命令 drop table erp 这个时候所有的mysql的相关进程都会停止,直到drop结束,m ...

  5. Innodb中MySQL如何快速删除2T的大表

    转自:http://database.51cto.com/art/201808/582324.htm OK,这里就说了.假设,你有一个表erp,如果你直接进行下面的命令: drop table erp ...

  6. DROP TABLE ** CASCADE CONSTRAINTS PURGE删除表的时候级联删除从表外键

    1.关于 cascade constraints 假设A为主表(既含有某一主键的表),B为从表(即引用了A的主键作为外键). 则当删除A表时,如不特殊说明,则 drop table A 系统会出现错误 ...

  7. oracle delete t1;drop table t1;drop table t1 purge

    Truncate tableTruncate table t1;Ddl语言,自动提交:不能回退:回收范围::挪动高水位线:将所有的数据清除,保留表结构:将表缩的最小:保留表的约束和权限. Drop t ...

  8. Oracle对大表进行delete注意事项

    如果对大表进行大量的delete和update,那么可以注意一下如下说明: (1) 查看执行计划,如果说删除的记录很多,走索引的成本会比全表扫描更大,因为更新数据时还需要做一些约束校验和创建index ...

  9. hive错误排查一:hive中执行 drop table命令卡住,删除表不成功

    起因 公司用的AWS EMR上的hive,突然不能删除表了. 经过 分析来看,估计是元数据那块出了问题.从元数据入手,元数据存在mysql的hive数据库中 直接使用hive配置文件hive-site ...

随机推荐

  1. poj1179 区间dp(记忆化搜索写法)有巨坑!

    http://poj.org/problem?id=1179 Description Polygon is a game for one player that starts on a polygon ...

  2. 轻快的vim(一):移动

    断断续续的使用VIM也一年了,会的始终都是那么几个命令,效率极低 前几个星期把Windows换成了Linux Mint,基本上也稳定了下来 就今晚,我已经下定决心开始新的VIM之旅,顺便写一系列的笔记 ...

  3. chromium添加flash

    http://blog.csdn.net/lainegates/article/details/27830333

  4. 摘要提取算法——本质上就是pagerank,选择rank最高的句子作为摘要,如果结合word2vec应该有非常好的效果

    最近需要做一些文本摘要的东西,选取了TextRank(论文参见<TextRank: Bringing Order into Texts>)作为对比方案,该方案可以很方便的使用Python相 ...

  5. oracle ash性能报告的使用方法

    活动会话历史报告活动会话历史v$active_session_history视图提供了在实例级别抽取会话活动信息.活动会话每分钟会被抽样一次且被存储在sga中的循环缓冲区中.任何被连接到数据库且正等待 ...

  6. SQL Server的自动备份设置及排错记事

    1.启动 SQL Server Management Studio管理器,登录进去. 2.在左侧可以看到这个,我们展开“管理”. 3.展开“管理”后,我们在“维护计划”项目上单击右键,在弹出菜单里选择 ...

  7. css3 animate写的超炫3D转换

    上一篇中介绍了animate的基本的属性,这一篇讲的则是关于animate以及transforms的使用 <!DOCTYPE html><html lang="en&quo ...

  8. Linux Shell Scripting Cookbook 读书笔记 6

    wget,curl, tar, rsync wget ftp://example.com/somefile.img -t 5 -O download.img -o log -t表示重试的次数 -O指定 ...

  9. python 下 excel,csv 文件的读写

    python 可以用利用xlrd 库读取数据excel数据,可以用xlwt写入excel数据,用csv 操作csv文件 xlrd xlwt  python 模块 官方链接  https://pypi. ...

  10. 部署hexo后github pages页面未更新或无法打开问题

    title: 部署hexo后github pages页面未更新或无法打开问题 date: 2018-03-30 15:34:29 categories: methods tags: hexo gith ...