删除没有表的所有模式

时间:2017-02-16 11:13:40

标签: mysql sql database

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

2 个答案:

答案 0 :(得分:2)

要了解没有表格的模式,您可以试试这个:

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)并且它只能用一个准备好的语句运行

答案 1 :(得分:0)

在评论中使用@dnoeth发布的方法,稍微不同的查询来获取drop命令,然后使用一些Notepad ++ magic执行它们以删除所有空数据库

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