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