MySQL 5.6批量删除taggregate_temp临时表报1172错误求助
解决vBulletin数据库taggregate_temp临时表批量删除的1172错误
问题原因
你用SELECT ... INTO @tables的方式尝试把多个表名存入单个变量,但这个语法只能接收单行结果,当查询返回数百个taggregate_temp表时,就会触发1172错误(结果包含多行)。
修正后的批量删除SQL
用GROUP_CONCAT把所有目标表名拼接成逗号分隔的字符串,就能生成合法的DROP TABLE语句:
SET @tables = NULL; SELECT GROUP_CONCAT(table_schema, '.`', table_name, '`') INTO @tables FROM information_schema.tables WHERE table_schema = 'mydatabase' AND table_name LIKE 'taggregate_temp%'; SET @tables = CONCAT('DROP TABLE ', @tables); PREPARE stmt1 FROM @tables; EXECUTE stmt1; DEALLOCATE PREPARE stmt1;
注意事项
- 如果临时表数量极多(超过默认的
group_concat_max_len限制,默认一般是1024或4096字节),需要先调整这个参数,避免拼接被截断:SET SESSION group_concat_max_len = 1000000; -- 设置足够大的值,按需调整 - 执行前可以先运行
SELECT @tables;查看生成的DROP语句,确认无误后再执行EXECUTE stmt1;,避免误删其他表。
内容的提问来源于stack exchange,提问作者nolino nolino
相关产品推荐
相关产品推荐

