在 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 中一次性删除多个表的主要内容,如果未能解决你的问题,请参考以下文章