繁体   English   中英

删除没有表的所有模式

[英]Dropping all schemas with no tables

我想删除所有带有零个表的数据库,但是我能够使用SELECT table_schema, count(table_name) FROM information_schema.tables group by table_schema来获得带有表的数据库,但是如何删除不在此列表中的数据库。 我无法手动完成,因为那里有500多个db。

要了解没有表的架构,可以尝试以下操作:

SELECT * FROM information_schema.schemata S
WHERE NOT EXISTS
    (SELECT 'TABLE' from information_schema.tables T
     WHERE T.table_schema = S.schema_name)

因为在系统表SCHEMATA您将找到服务器的所有模式,而在表TABLES中将找到所有模式中的所有表

上层查询必须在游标上输入,因此您必须使用准备好的语句来执行游标,因为DROP DATABASE有一个变量(您的schema_table),并且只能使用准备好的语句来运行

使用@dnoeth在注释中发布的方法,对查询稍有不同,以获取drop命令,然后使用某些Notepad ++魔术执行它们以删除所有空数据库

SELECT  concat('drop database ',schema_name) FROM information_schema.schemata 
WHERE schema_name NOT IN
(SELECT TABLE_SCHEMA FROM information_schema.tables)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM