删除以特定前缀开头的所有表格?

Gre*_*gle 9 mysql sql

我在这个问题上找到了另一个帖子,但是我无法使用它的解决方案,所以我想我会更清楚和详细地询问.

我有一个代表vBulletin论坛的大型MySQL数据库.几年来,这个论坛已经对每个视图生成一个错误,每次创建一个名为新表aagregate_temp_1251634200,aagregate_temp_1251734400等等等,有在数据库中这些表的约20,000,我想将它们全部删除.

我想发出一个相当于的命令DROP TABLE WHERE TABLE_NAME LIKE 'aggregate_temp%';.

不幸的是,这个命令不起作用,谷歌对这个问题的结果充满了我所理解的精心设计的存储过程,而且所有这些程序似乎都适合不同海报的更复杂的问题.

是否可以编写一个基于name like匹配丢弃多个表的简单语句?

spe*_*593 8

没有一个声明可以做到这一点.

最简单的方法是生成一组语句,并单独执行它们.

一个简单的查询可以为您生成语句:

 SELECT CONCAT('DROP TABLE `',t.table_schema,'`.`',t.table_name,'`;') AS stmt
   FROM information_schema.tables t
  WHERE t.table_schema = 'mydatabase'
    AND t.table_name LIKE 'aggregate\_temp%' ESCAPE '\\'
  ORDER BY t.table_name
Run Code Online (Sandbox Code Playgroud)

这只返回一个行集,但行方便地包含您需要执行的确切SQL语句.(请注意,这information_schema是一个包含元数据的内置数据库.您只需要替换mydatabase要从中删除表的数据库的名称.

保存此查询结果集为纯文本文件,删除任何标题行,瞧,你已经有了一个脚本,你可以在你的SQL客户端执行.

不需要精心设计的存储过程.


Fre*_*ang 5

稍微谷歌搜索发现了这个:

SELECT 'DROP TABLE "' + TABLE_NAME + '"' 
FROM INFORMATION_SCHEMA.TABLES 
WHERE TABLE_NAME LIKE 'prefix%'
Run Code Online (Sandbox Code Playgroud)

这应该生成一个脚本。

来源删除名称以特定字符串开头的所有表


n34*_*nda 5

根据记忆,您必须使用准备好的语句,例如:堆栈交换上的大量示例

我会推荐这个例子:

SQL:删除带有前缀的表

上面的 SQL,这个包含特定的数据库名称 - 它为您构建它

SELECT CONCAT( 'DROP TABLE ', GROUP_CONCAT(table_name) , ';' ) 
AS statement FROM information_schema.tables 
WHERE table_schema = 'database_name' AND table_name LIKE 'myprefix_%';
Run Code Online (Sandbox Code Playgroud)

这是一种不同的方法:

MySQL批量删除表在哪里表喜欢?