MySQL DROP TABLE 删除表

在本文中,我们介绍了在 MySQL 服务器上如何使用 DROP TABLE 语句删除已有的表。

当我们不需要某个表的时候,我们可以将此表删除。在 MySQL 中,DROP TABLE 语句用来删除表。

注意:DROP TABLE 语句将永久删除表和表中的数据,请谨慎操作。

DROP TABLE 语句语法

以下是 DROP TABLE 语句的基本语法:

DROP TABLE [IF EXISTS]
  table_name [, table_name] ...

说明:

  • DROP TABLE 关键字后面是要删除的表名。如果要删除多个表,请使用逗号分隔表名。

  • IF EXISTS 选项避免了删除不存在的表时发生的错误。它是可选的。

    当要删除的表中有不存在的表时:

    • IF EXISTS 选项,不会对不存在的表报错。该语句会删除存在的表,并给出不存在的表的提示。
    • 没有 IF EXISTS 选项,该语句运行失败带有一个指示不能移除不存在的表的错误。该语句不会删除任何表。
  • DROP TABLE 删除表的定义和表中的数据,以及表上触发器。

  • 你需要具有要删除的每一个表的 DROP 权限。

DROP TABLE 实例

为了演示 DROP TABLE 用法,我们需要在 testdb 数据库中创建几个表。请跟随以下步骤:

  1. 使用 root 用户登录 MySQL 数据库:

    mysql -u root -p
    

    根据提示输入 root 用户的密码。

    注意:您也可以使用其他任何具有相应的数据库权限的用户登录。

  2. 使用以下语句选择 testdb 数据库

    USE testdb;
    

    如果还未创建 testdb 数据库,请先使用 CREATE DATABASE 语句创建数据库:

    CREATE DATABASE testdb;
    
  3. 使用 CREATE TABLE 语句创建实例表。

    CREATE TABLE test1 (
      id INT NOT NULL AUTO_INCREMENT,
      v VARCHAR(45) NULL,
      PRIMARY KEY (id));
    

    然后,克隆几个相同定义的表。

    CREATE TABLE test2 LIKE test1;
    CREATE TABLE test3 LIKE test1;
    CREATE TABLE test4 LIKE test1;
    CREATE TABLE test5 LIKE test1;
    
  4. 查看数据库中所有的表

    SHOW TABLES;
    
    +------------------+
    | Tables_in_testdb |
    +------------------+
    | test1            |
    | test2            |
    | test3            |
    | test4            |
    | test5            |
    | user             |
    | user_hobby       |
    +------------------+
    7 rows in set (0.00 sec)

现在,演示表已经准备完成,让我们看几个具体的实例。

删除一个表

我们使用以下语句删除 test5 表:

DROP TABLE test5;
Query OK, 0 rows affected (0.01 sec)

这里说明已经成功删除了 test5 表。

我们通过查看数据库的所有的表来验证此 DROP TABLE 操作的结果。

SHOW TABLES;
+------------------+
| Tables_in_testdb |
+------------------+
| test1            |
| test2            |
| test3            |
| test4            |
| user             |
| user_hobby       |
+------------------+
6 rows in set (0.00 sec)

删除多个表

我们使用以下语句删除 test3test4 表:

DROP TABLE test3, test4;
Query OK, 0 rows affected (0.01 sec)

这里说明已经成功删除了 test3test4 表。

我们通过查看数据库的所有的表来验证此 DROP TABLE 操作的结果。

SHOW TABLES;
+------------------+
| Tables_in_testdb |
+------------------+
| test1            |
| test2            |
| user             |
| user_hobby       |
+------------------+
4 rows in set (0.00 sec)

删除不存在的表

我们使用以下语句删除 test5 表:

DROP TABLE test5;
ERROR 1051 (42S02): Unknown table 'testdb.test5'

因为我们在前面的实例中已经删除了 test5 表,此时 test5 表是不存在的。所以此语句返回了错误信息。

现在我们使用 IF EXISTS 选项进行删除:

DROP TABLE IF EXISTS test5;
Query OK, 0 rows affected, 1 warning (0.00 sec)

这里我们使用了 IF EXISTS 选项,该语句并没有返回错误。但是,1 warning 表示有一个需要注意的事项。我们可以使用以下语句查看具体的注意事项:

SHOW WARNINGS;
+-------+------+------------------------------+
| Level | Code | Message                      |
+-------+------+------------------------------+
| Note  | 1051 | Unknown table 'testdb.test5' |
+-------+------+------------------------------+
1 row in set (0.00 sec)

这里告诉我们具体的注意事项是:Unknown table 'testdb.test5'

我们再看一个列子:

DROP TABLE test2, test5;
ERROR 1051 (42S02): Unknown table 'testdb.test5'

就像前面的例子一样,因为 test5 表是不存在的。所以此语句返回了错误信息。

现在我们使用 IF EXISTS 选项进行删除:

DROP TABLE IF EXISTS test2, test5;
Query OK, 0 rows affected, 1 warning (0.00 sec)

这里我们使用了 IF EXISTS 选项,该语句并没有返回错误。该语句的执行结果是:删除了 test2 表。

我们通过查看数据库的所有的表来验证此 DROP TABLE 操作的结果。

SHOW TABLES;
+------------------+
| Tables_in_testdb |
+------------------+
| test1            |
| user             |
| user_hobby       |
+------------------+
3 rows in set (0.00 sec)

可见,DROP TABLE 语句中带上 IF EXISTS 选项,它会忽略不存在表,并删除存在的表。

结论

在本文中,我们讨论了在 MySQL 中使用 DROP TABLE 语句删除表。本文要点如下:

  • DROP TABLE 关键字后面是要删除的表名。如果要删除多个表,请使用逗号分隔表名。
  • IF EXISTS 选项避免了删除不存在的表时发生的错误。它是可选的。

始终需要注意的是:DROP TABLE 语句会物理删除表和表中的数据。这个操作不能撤销,请谨慎操作。