mR_*_*r0g 3 mysql command-line
我试图让 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';
Run Code Online (Sandbox Code Playgroud)
您必须使用准备好的语句。
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;
Run Code Online (Sandbox Code Playgroud)
但是您必须将所有优化表语句放入一个变量中,这就是我将其@s与自身连接的原因。否则,您必须使用游标,这是不必要的工作。
从 MySQL 5.0.23 开始,支持以下附加语句:
ANALYZE TABLE
OPTIMIZE TABLE
REPAIR TABLE
Run Code Online (Sandbox Code Playgroud)
编辑:一个更简单的方法是这样的:
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';
Run Code Online (Sandbox Code Playgroud)