MySQL的SQL语句 - 数据定义语句 - DROP 语句(3)

DROP TABLE 语句

 




DROP [TEMPORARY] TABLE [IF EXISTS]    tbl_name [, tbl_name] ...    [RESTRICT | CASCADE]
 
DROP TABLE 语句删除一个或多个表。必须拥有每一个表的 DROP 权限。   要小心这个句话! 对于每一个表,它将删除表定义和全部表数据。若是表被分区,则该语句删除表定义、全部分区、存储在这些分区中的全部数据以及与被删除表关联的全部分区定义。   删除一个表也会删除该表的全部触发器。   DROP TABLE 会致使隐式提交,但与 TEMPORARY 关键字一块儿使用时除外。   重要   删除表时,不会自动删除专门为该表授予的权限。必须手动删除它们。   若是参数列表中的某些表不存在,则 DROP TABLE 语句的行为取决于 IF EXISTS 子句是否给定:   ● 若是没有 IF EXISTS,该语句将失败,并出现错误,指示它没法删除哪些不存在的表,而且不进行任何更改。   ● 若是存在,删除不存在的表不会发生错误。该语句删除全部存在的指定表,并为每一个不存在的表生成一个 NOTE 诊断。能够使用 SHOW WARNINGS 语句查询这些诊断信息。   在一些很是规状况下,例如在数据字典中有条目,但没有存储引擎管理的表的特殊状况,用 IF EXISTS 语句也颇有用。(例如,在从存储引擎中删除表以后,但在删除数据字典条目以前,发生了异常的服务器退出。)   TEMPORARY 关键字有如下效果:   ● 该语句只删除 TEMPORARY 表。   ● 该语句不会致使隐式提交。   ● 不会检查访问权限。临时表只对建立它的会话可见,所以不须要检查。   包含 TEMPORARY 关键字是防止意外删除非临时表的好方法。   RESTRICT 和 CASCADE 关键字什么也不作。容许它们使得从其余数据库系统移植到 MySQL 变得更容易。   全部 innodb_force_recovery 设置都不支持 DROP TABLE   DROP TABLESPACE 语句  


DROP [UNDO] TABLESPACE tablespace_name    [ENGINE [=] engine_name]
 
该语句删除了以前使用 CREATE TABLESPACE 建立的表空间。NDB InnoDB 存储引擎支持该语句。   UNDO 关键字是 MySQL 8.0.14 中引入的,要删除回滚表空间,必须指定UNDO 关键字。只有使用 CREATE UNDO TABLESPACE 语法建立的 undo 表空间能够被删除。被删除以前 undo 表空间必须处于空状态。   ENGINE 设置使用表空间的存储引擎,其中 engine_name 是存储引擎的名称。目前支持 InnoDB 和 NDB 值。若是没有设置,则使用default_storage_engine 的值。若是它与用于建立表空间的存储引擎不一样,则 DROP TABLESPACE 语句将失败。   tablespace_name  MySQL 中是区分大小写的标识符。   对于 InnoDB 的通用表空间,必须在执行 DROP TABLESPACE 操做以前将全部表从表空间中删除。若是表空间不为空,DROP TABLESPACE 将返回错误。   要删除的 NDB 表空间必须不包含任何数据文件换句话说,在删除一个NDB 表空间以前,必须先使用 ALTER TABLESPACE ... DROP DATAFILE 删除其中的数据文件。   注意事项   ● 当表空间中的最后一个表被删除时,通用 InnoDB 表空间不会被自动删除。必须使用 DROP TABLESPACE tablespace_name 语句显式地删除表空间。   ● DROP DATABASE 操做能够删除属于通用表空间的表,但不能删除该表空间,即便该操做删除属于该表空间的全部表。必须使用 DROP TABLESPACE tablespace_name 语句显式地删除表空间。   ● 与系统表空间相似,截断或删除存储在通用表空间中的表会在通用表空间 .ibd 数据文件内部释放空闲空间,该空间只能用于新的 InnoDB 数据,空间不会像独立表空间那样释放回操做系统。   InnoDB的例子   这个例子演示了如何删除 InnoDB 通用表空间。通用表空间 ts1 建立时只有一个表。在删除表空间以前,必须删除该表。  







mysql> CREATE TABLESPACE `ts1` ADD DATAFILE 'ts1.ibd' Engine=InnoDB;
mysql> CREATE TABLE t1 (c1 INT PRIMARY KEY) TABLESPACE ts1 Engine=InnoDB;
mysql> DROP TABLE t1;
mysql> DROP TABLESPACE ts1;
 
这个例子演示了如何删除 undo 表空间。undo 表空间在被删除以前必须是空的。  

mysql> DROP UNDO TABLESPACE undo_003;
 
NDB 例子   这个示例展现了如何删除 NDB 表空间 myts,该表空间有一个数据文件mydata-1.dat,并假设存在名为 mylg 的日志文件组。  




mysql> CREATE TABLESPACE myts    ->     ADD DATAFILE 'mydata-1.dat'    ->     USE LOGFILE GROUP mylg    ->     ENGINE=NDB;
 
在被删除以前,必须使用 ALTER TABLESPACE 从表空间中删除全部数据文件,以下所示:  





mysql> ALTER TABLESPACE myts    ->     DROP DATAFILE 'mydata-1.dat'    ->     ENGINE=NDB;
mysql> DROP TABLESPACE myts;
 
DROP TRIGGER 语句  

DROP TRIGGER [IF EXISTS] [schema_name.]trigger_name
 
该语句删除触发器。模式(数据库)名称是可选的。若是省略模式,触发器将从默认模式中删除。执行 DROP TRIGGER 须要与触发器关联的表的TRIGGER 权限。   使用 IF EXISTS 防止删除不存在的触发器发生错误。当使用 IF EXISTS时,会为不存在的触发器生成一个 NOTE   若是删除表,也会删除表的触发器。   DROP VIEW 语句  



DROP VIEW [IF EXISTS]    view_name [, view_name] ...    [RESTRICT | CASCADE]
 
DROP VIEW 语句删除一个或多个视图。执行此语句必需要拥有每一个视图的DROP 权限。   若是参数列表中指定的某些视图不存在,该语句将失败,会报错指出不存在的视图名称,此种状况下不进行任何更改。   注意   在 MySQL 5.7 和更早的版本中,若是参数列表中指定的某些视图不存在,DROP VIEW 语句会返回错误,但也会删除列表中确实存在的全部视图。因为 MySQL 8.0 中行为的改变,一个在 MySQL 5.7 复制源服务器上部分完成的 DROP VIEW 操做在 MySQL 8.0 副本上复制时失败。要避免这种失败场景,请在 DROP VIEW 语句中使用 IF EXISTS 语法,以防止不存在的视图引起错误。   IF EXISTS 子句防止不存在的视图引起错误。当给定此子句时,将为每一个不存在的视图生成 NOTE   若是给定 RESTRICT 和 CASCADE,则解析但忽略它们。
相关文章
相关标签/搜索