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,则解析但忽略它们。


上一篇:达梦数据库,不同模式迁移(指令篇)


下一篇:PG管理_表空间的学习