在mysql中一键删除多个表


102

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

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

其中a,b,c是来自数据库测试的表。


17
您已经回答了自己
ajreal 2011年

根据以下答案,在HeidiSQL中,您可以按表名(上部文本框)过滤表,写入DROP TABLE 查询并双击每个所需表以将其名称附加到查询中(在表之间加逗号),然后按F9键执行。有点题外话,但我是来这里的。
伊万·费雷尔

对于那些想砸几个表具有相同前缀的,因为DROP TABLE table_prefix_*不与明星人物的工作:stackoverflow.com/questions/6758652/...
baptx

Answers:


135

例:

假设表A有两个子B和C。然后我们可以使用以下语法删除所有表。

DROP TABLE IF EXISTS B,C,A;

可以将其放置在脚本的开头,而不是分别删除每个表。


29
也许值得指出的是,这些表根本不需要任何关系。它们可以完全独立,并且此语法仍然有效。
crmpicco 2014年

76
SET foreign_key_checks = 0;
DROP TABLE IF EXISTS a,b,c;
SET foreign_key_checks = 1;

然后,您不必担心以正确的顺序删除它们,也不必担心它们是否实际存在。

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


3
通过启用fkey检查(y),您已使我免于麻烦。
HungryCoder 2014年

0

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

  1. 使用下面的表格

    • 对于SQL Server-SELECT CONCAT(name,',')Table_Name FROM SYS.tables;
    • 对于口头-从SYS.ALL_TABLES中选择CONCAT(TABLE_NAME,',');
  2. 复制并粘贴结果集中的表名,并将其粘贴到DROP命令之后。


-3
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
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.