我试图让 MySql 将以下语句的结果作为进一步的 sql 语句执行。我相信在oracle sqlplus中这是使用以下实现的spool
功能。这是如何实现的Mysql?
select concat('OPTIMIZE TABLE `', ist.TABLE_SCHEMA,'`.', ist.TABLE_NAME, ';') FROM INFORMATION_SCHEMA.TABLES ist where table_schema = 'my_schema';
你必须使用准备好的陈述 https://dev.mysql.com/doc/refman/5.7/en/sql-prepared-statements.html.
SET @s:='';
SELECT @s:=concat(@s, 'OPTIMIZE TABLE `', ist.TABLE_SCHEMA,'`.', ist.TABLE_NAME, ';') FROM INFORMATION_SCHEMA.TABLES ist where table_schema = 'my_schema';
PREPARE stmt FROM @s;
EXECUTE stmt;
DEALLOCATE PREPARE stmt;
但是你必须将所有优化表语句放入一个变量中,这就是我连接的原因@s
与它自己。否则你就必须使用光标,这是不必要的工作。
从 MySQL 5.0.23 开始,支持以下附加语句:
ANALYZE TABLE
OPTIMIZE TABLE
REPAIR TABLE
编辑:一个更简单的方法是这样的:
SELECT CONCAT('OPTIMIZE TABLE `', ist.TABLE_SCHEMA,'`.', ist.TABLE_NAME, ';') FROM INFORMATION_SCHEMA.TABLES ist WHERE table_schema = 'my_schema'
INTO OUTFILE '/tmp/my_optimization';
SOURCE 'tmp/my_optimization';
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)