语法:

删表

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语法错误_MySQL DROP TABLE操作以及 DROP 大表时的注意事项相关推荐

  1. mysql中关系怎么弄_mysql数据库关系操作

    ### mysql数据库 #### 知识要点: 1. 数据操作增.删.改 2. 外键约束要求 3. 一对多表关系 4. 一对一表关系 5. 多对多表关系 6. 外键约束的参照操作 ### 数据操作 # ...

  2. mysql中如何运行存储过程_MySQL存储过程如何操作

    mysql在5.1之后增加了存储过程的功能, 存储过程运行在mysql内部,语句都已经编译好了,速度比sql更快. 存储过程与mysql相当于shell和linux系统.如果你是程序员的话,那我告诉你 ...

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

    case1,删除大表时,因为清理自适应hash索引占用的内容导致的MySQL服务挂起 case2,大表的随意Drop或者truncate导致MySQL服务的挂起 按照本文中的结论就是 MySQL5.6 ...

  4. mysql中checktable语句来_MySQL的命令check table用法

    MySQL日志文件里出现以下错误,MySQL表通常不会发生crash情况,一般是在更新数据库时MySQL停止会导致. CHECK TABLE语法 CHECK TABLE tbl_name[,tbl_n ...

  5. MySQL中show语法使用总结

    MySQL中 show 语法的使用: 先查看MySQL版本信息: mysql> select version(); +------------+ | version() | +--------- ...

  6. mysql的char在java中表示为_Java学习篇之-Mysql中varchar门类总结_mysql

    java学习篇之---mysql中varchar类型总结 Mysql中varchar类型总结 今天新做一个项目,需要自己进行数据库设计,发现自己对varchar的用法还不是很熟悉,所以查阅资料总结若下 ...

  7. 数组在mysql中是什么类型_MySQL 中的数据类型介绍

    1.概述 要了解一个数据库,我们也必须了解其支持的数据类型. MySQL支持所有标准的SQL数据类型,主要分3类: 数值类型 字符串类型 时间日期类型 另一类是几何数据类型,用的不多,也没多介绍.  ...

  8. java中错误的源文件_如果我的Java源文件中存在语法错误,为什么Eclipse会生成.class文件?...

    当我使用 Eclipse IDE创建项目时,即使我的代码中存在语法错误,它也会生成一个类文件? class Test { public void test(String value) { System ...

  9. C语言中的语法错误和语义错误

    语法错误 1:如果不遵循C语言的规则就会犯语法错误,它类似于英语中的语法错误. 例如(Bugs frustrate be can)这句英语 可以看出句子中的英语单词都是正确的,但是没有按照正确的顺序组 ...

  10. mysql中怎么分页查询_mysql怎样实现分页查询

    mysql分页查询的方法:1.用具体字段代替[*]:2.先查寻索引:3.使用[between - and],id必须是连续递增的:4.保留上一页记录所在id. mysql分页查询的方法: 简述通常在M ...

最新文章

  1. string 相等 java_java中String相等问题
  2. 使用PLP特征训练crnn语音分类
  3. 社交网络用户并非越多越好
  4. openresty开发系列36--openresty执行流程之6日志模块处理阶段
  5. docker-compose HBase + Phoenix 开发环境单机快速部署
  6. 前端学习(1126):递归求数学题
  7. Django框架之Filters(过滤器)、母版的使用
  8. 顺丰物流单号查询效果(可输入多个文本框)
  9. python 字符串首字母_如何将string(Python)中每个单词的首字母大写?
  10. ASP.NET Web应用程序和ASP.NET网站的区别
  11. linux系统ping地址端口,linux ping 带端口
  12. 工厂如何引入ERP生产管理系统
  13. 怎么批量将DWG文件转换PDF文件
  14. 公司-广告-分众传媒:分众传媒
  15. python中的head函数_Pandas DataFrame.head()用法例子
  16. 密码学技术如何选型?终探量子计算通信的安全模型
  17. c32循迹小车c语言程序,STM32小车红外黑线循迹源程序
  18. 大学生应该常去的网站
  19. 办公软件excel的实用技巧
  20. 第四周——爬虫入门 Day3 7.20

热门文章

  1. 模拟位置 定位 钉钉打卡 运动轨迹 MD
  2. 建行网银盾无法识别怎么办
  3. 灌篮高手全国大赛漫画 (23-31卷) + 十日后
  4. C-V2X 网络层及适配层解析填充
  5. 解决win10开启移动热点共享手机连上后无法上网的问题
  6. 计算机配置的详细信息,如何查看电脑的配置参数,看电脑详细配置的方法
  7. 云计算革命-IT产业第三次变革,将如何影响人类社会
  8. python保存快捷键是什么_python常用快捷键
  9. 同一个局域网内如何共享文件夹(含共享打印机操作方法)
  10. java实现求调和数列的和,即:1/1 + 1/2 + ... + 1/n