MySQL bulk drop table where table like?
1 2 3 4 |
我知道这不行! SQL中这样的东西有什么用呢? 我可以用一个简单的Python脚本来做这个,但只是想知道我们是否可以直接用SQL做一些事情。 我正在使用MySQL。 谢谢!
你可以使用准备好的陈述 -
1 2 3 4 5 6 7 8 | SET @tables = NULL; SELECT GROUP_CONCAT('`', table_schema, '`.`', table_name,'`') INTO @tables FROM information_schema.tables WHERE table_schema = 'myDatabase' AND table_name LIKE BINARY 'del%'; SET @tables = CONCAT('DROP TABLE ', @tables); PREPARE stmt1 FROM @tables; EXECUTE stmt1; DEALLOCATE PREPARE stmt1; |
它将生成并执行这样的语句 -
@ Devart答案的一个小改进:
1 2 3 4 5 6 7 8 9 10 11 12 | SET @tables = NULL; SELECT GROUP_CONCAT(table_schema, '.`', table_name, '`') INTO @tables FROM (select * from information_schema.tables WHERE table_schema = 'myDatabase' AND table_name LIKE 'del%' LIMIT 10) TT; SET @tables = CONCAT('DROP TABLE ', @tables); select @tables; PREPARE stmt1 FROM @tables; EXECUTE stmt1; DEALLOCATE PREPARE stmt1; |
应重复执行此脚本,直到控制台的输出为
变化是:
如果你只需要快速删除一堆表(不是纯SQL,那么不直接回答这个问题)一行shell命令可以做到:
1 |
我发现将IFNULL添加到Devart的解决方案是有用的,以避免在没有与查询匹配的表时生成错误。
如果您有phpMyAdmin可用,并且要求删除具有特定前缀的表,则可以快速轻松地执行此操作。转到所需的数据库,并显示所有表的列表。由于表格按字母顺序显示,因此带有删除前缀的表格将一起显示。转到第一个,然后单击左侧的复选框。然后向下滚动到带有前缀的最后一个表,按住shift键,然后单击复选框。这导致所有带有前缀的表被勾选。转到列表底部,然后选择所有选定表的操作下拉列表。完成删除,检查生成的SQL看起来是否合适!