提问人:nolino nolino 提问时间:9/4/2023 最后编辑:Mike Doenolino nolino 更新时间:9/4/2023 访问量:20
Mysql 5.6 中的 Concat 和 Drop 具有多于一行
Concat and Drop in Mysql 5.6 with more thant one row
问:
我确实维护着一个非常古老的网站 - 使用 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(在一段时间内移动和升级论坛之前。
答:
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 查询以删除临时表。
评论