mysql drop语句怎么用_MySQL的SQL语句 - 数据定义语句 - DROP 语句(3)

DROP TABLE 语句

1. DROP [TEMPORARY] TABLE [IF EXISTS]

2. tbl_name [, tbl_name] ...

3. [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 语句

1. DROP [UNDO] TABLESPACE tablespace_name

2. [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 创建时只有一个表。在删除表空间之前,必须删除该表。

1. mysql> CREATE TABLESPACE `ts1` ADD DATAFILE 'ts1.ibd' Engine=InnoDB;

2.

3. mysql> CREATE TABLE t1 (c1 INT PRIMARY KEY) TABLESPACE ts1 Engine=InnoDB;

4.

5. mysql> DROP TABLE t1;

6.

7. mysql> DROP TABLESPACE ts1;

这个例子演示了如何删除 undo 表空间。undo 表空间在被删除之前必须是空的。

mysql> DROP UNDO TABLESPACE undo_003;

NDB 例子

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

1. mysql> CREATE TABLESPACE myts

2. -> ADD DATAFILE 'mydata-1.dat'

3. -> USE LOGFILE GROUP mylg

4. -> ENGINE=NDB;

在被删除之前,必须使用 ALTER TABLESPACE 从表空间中删除所有数据文件,如下所示:

1. mysql> ALTER TABLESPACE myts

2. -> DROP DATAFILE 'mydata-1.dat'

3. -> ENGINE=NDB;

4.

5. mysql> DROP TABLESPACE myts;

DROP TRIGGER 语句

1. DROP TRIGGER [IF EXISTS] [schema_name.]trigger_name

该语句删除触发器。模式(数据库)名称是可选的。如果省略模式,触发器将从默认模式中删除。执行 DROP TRIGGER 需要与触发器关联的表的 TRIGGER 权限。

使用 IF EXISTS 防止删除不存在的触发器发生错误。当使用 IF EXISTS 时,会为不存在的触发器生成一个 NOTE。

如果删除表,也会删除表的触发器。

DROP VIEW 语句

1. DROP VIEW [IF EXISTS]

2. view_name [, view_name] ...

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

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值