Mysql 5.6 中的 Concat 和 Drop 具有多于一行

Concat and Drop in Mysql 5.6 with more thant one row

提问人:nolino nolino 提问时间:9/4/2023 最后编辑:Mike Doenolino nolino 更新时间:9/4/2023 访问量:20

问:

我确实维护着一个非常古老的网站 - 使用 vBulletin。

一段时间以来,数据库确实创建了临时表(taggregate_temp),我确实有一个很好的部分(大约数百个),这大大减慢了服务器的速度......

我做了一些搜索,以找到摆脱这些临时表的方法。

并尝试使用(经过修改)我确实发现的一些查询......

这个会很完美,但是..我确实得到一个 = 错误 1172 - 结果包含多行

而且我没有找到,行的限制在哪里:

    SET @tables = NULL;
    SELECT CONCAT(table_schema, '.`', table_name, '`') INTO @tables FROM
    (select * from
     information_schema.tables 
      WHERE table_schema = 'mydatabase' AND table_name LIKE 'taggregate_temp%' ESCAPE '\\'
      LIMIT 10000) TT;

    SET @tables = CONCAT('DROP TABLE ', @tables);
    select @tables;
    PREPARE stmt1 FROM @tables;
    EXECUTE stmt1;
    DEALLOCATE PREPARE stmt1;

提前,谢谢。希望从那些乘法的临时表中清除 Db(在一段时间内移动和升级论坛之前。

MySQL 临时 删除

评论

0赞 Akina 9/4/2023
必须创建存储过程。SELECT from information 架构必须是游标。您可以逐个获取表名称,并在循环周期中删除它们。或者,您可以使用 GROUP_CONCAT 创建一个多查询,并将所有表放在一个准备好的 stmt 中。
0赞 Richard Ebeling 9/4/2023
这回答了你的问题吗?删除与某些通配符匹配的MySQL数据库?

答:

0赞 nicholas riyan 9/4/2023 #1

下面是经过修改以解决错误并删除临时表的代码:

SET @drop_tables = NULL;

SELECT GROUP_CONCAT(CONCAT('`', table_name, '`')) INTO @drop_tables
FROM information_schema.tables 
WHERE table_schema = 'mydatabase' AND table_name LIKE 'taggregate_temp%' ESCAPE '\\';

SET @drop_query = CONCAT('DROP TABLE ', @drop_tables);

PREPARE stmt FROM @drop_query;
EXECUTE stmt;
DEALLOCATE PREPARE stmt;

此代码检索与“mydatabase”架构中的模式“taggregate_temp%”匹配的所有临时表的名称,并将它们连接到单个 DROP TABLE 查询中。然后,它准备并执行 DROP 查询以删除临时表。