暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

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

林员外聊编程 2020-08-31
200
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,则解析但忽略它们。
 
 
 
 
 
官方文档:
https://dev.mysql.com/doc/refman/8.0/en/drop-table.html
https://dev.mysql.com/doc/refman/8.0/en/drop-tablespace.html
https://dev.mysql.com/doc/refman/8.0/en/drop-trigger.html
https://dev.mysql.com/doc/refman/8.0/en/drop-view.html
 

文章转载自林员外聊编程,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论