gpt4 book ai didi

mysql - 如何删除所有以某个前缀开头的MySQL表?

转载 作者:可可西里 更新时间:2023-11-01 06:28:30 28 4
gpt4 key购买 nike

我找到了关于这个问题的另一个话题,但我无法使用它的解决方案,所以我想我会问得更清楚、更详细。

我有一个代表 vBulletin 论坛的大型 MySQL 数据库。几年来,这个论坛在每个 View 上都有错误生成,每次创建一个名为 aagregate_temp_1251634200aagregate_temp_1251734400 等的新表。这些表大约有 20,000 个在数据库中,我希望将它们全部删除。

我想发出一个命令,该命令表示等同于 DROP TABLE WHERE TABLE_NAME LIKE 'aggregate_temp%';

不幸的是,这个命令不起作用,Google 针对这个问题的结果充满了我无法理解的精心设计的存储过程,而且所有这些似乎都是针对不同海报的更复杂问题量身定制的。

是否可以编写一个简单的语句,根据 name like 匹配删除多个表?

最佳答案

没有一个语句可以做到这一点。

最简单的方法是生成一组语句,然后分别执行它们。

我们可以编写一个简单的查询来为我们生成语句:

 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

SELECT 语句返回一个行集,但每一行都方便地包含我们删除表所需执行的确切 SQL 语句。 (请注意,information_schema 是一个包含元数据的内置数据库。我们需要将 mydatabase 替换为我们要删除的数据库的名称表格来自。

我们可以将此查询的结果集保存为纯文本文件,删除任何标题行,瞧,我们有一个可以在 SQL 客户端中执行的脚本。

不需要复杂的存储过程。

关于mysql - 如何删除所有以某个前缀开头的MySQL表?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24045170/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com