在 MySQL 中一次性删除多个表

Posted

技术标签:

【中文标题】在 MySQL 中一次性删除多个表【英文标题】:Drop multiple tables in one shot in MySQL 【发布时间】:2011-02-07 14:06:19 【问题描述】:

如何通过一个命令从一个数据库中删除多个表。 比如,

> use test; 
> drop table a,b,c;

其中 a,b,c 是数据库 test 中的表。

【问题讨论】:

你已经回答了自己 根据下面的答案,在 HeidiSQL 中,您可以按名称过滤表(上部文本框),将DROP TABLE 写入查询并双击每个所需表以将其名称附加到查询中(输入它们之间的逗号)然后按 F9 执行。有点跑题了,但我是为此而来的。 对于想要删除多个具有相同前缀的表的人,因为DROP TABLE table_prefix_* 不适用于星号:***.com/questions/6758652/… 【参考方案1】:

我们可以使用以下语法来删除多个表:

DROP TABLE IF EXISTS B,C,A;

这可以放在脚本的开头而不是单独删除每个表。

【讨论】:

也许值得指出的是,这些表根本不需要任何关系。它们可以完全独立,并且这种语法仍然有效。【参考方案2】:
SET foreign_key_checks = 0;
DROP TABLE IF EXISTS a,b,c;
SET foreign_key_checks = 1;

那么您就不必担心以正确的顺序放置它们,也不必担心它们是否真的存在。

注意这仅适用于 mysql(如问题所示)。其他数据库可能有不同的方法来执行此操作。

【讨论】:

您通过关闭 fkey 检查 (y) 让我免于麻烦。 我仍然得到 # 1451 - 由于外键限制,删除或更新父记录失败 编辑:我在 phpmyadmin 中运行它,外键检查复选框还在继续。我认为您不需要那里的SET foreign_key_checks 查询,只需使用复选框即可。【参考方案3】:

如果有很多表要删除,这是一种懒惰的方式。

    使用下面的获取表格

    对于 sql server - SELECT CONCAT(name,',') Table_Name FROM SYS.tables; 对于口腔 - SELECT CONCAT(TABLE_NAME,',') FROM SYS.ALL_TABLES;

    从结果集中复制并粘贴表名,并将其粘贴到 DROP 命令之后。

【讨论】:

【参考方案4】:
declare @sql1 nvarchar(max) 
SELECT @sql1 =
  STUFF(
         (
           select ' drop table dbo.[' + name + ']'

           FROM sys.sysobjects AS sobjects
           WHERE (xtype = 'U') AND (name LIKE 'GROUP_BASE_NEW_WORK_%')
           for xml path('')
        ),
     1, 1, '')

  execute sp_executesql @sql1

【讨论】:

以上是关于在 MySQL 中一次性删除多个表的主要内容,如果未能解决你的问题,请参考以下文章

mysql中动态sql的一次实际应用

MySQL,一次查询更新多个表

如何从 MySQL 中的多个表中删除?

MySQL,一次查询更新多个表

mysql查询一次在单个查询中在多个表中插入记录

如何在mysql中一次更改多个表?