我有兴趣创建一个定期事件,以便每晚优化我的数据库表。
我到了SELECT Concat('OPTIMIZE TABLE ', TABLE_NAME, ';') FROM INFORMATION_SCHEMA.TABLES WHERE table_schema='database_name';
。如何在MySQL事件中执行每一行?
我更喜欢使用MySQL / MariaDB事件而不涉及bash。谢谢!
答案 0 :(得分:1)
所以,这是你的查询。你只需要改变SELECT语句然后就可以调用它
ELIMITER //
CREATE PROCEDURE p1()
BEGIN
DECLARE done INT DEFAULT FALSE;
DECLARE val VARCHAR(2000);
DECLARE curs CURSOR FOR SELECT sqlstring FROM table_a;
DECLARE CONTINUE HANDLER FOR NOT FOUND SET done = TRUE;
OPEN curs;
read_loop: LOOP
FETCH curs INTO val;
IF done THEN
LEAVE read_loop;
END IF;
SET @sql := val;
PREPARE stmt FROM @sql;
EXECUTE stmt;
DEALLOCATE PREPARE stmt;
END LOOP;
CLOSE curs;
END; //
DELIMITER ;
称之为
调用p1();
答案 1 :(得分:0)
管理以使其运行:
BEGIN
DECLARE done INT DEFAULT FALSE;
DECLARE val VARCHAR(2000);
DECLARE curs CURSOR FOR SELECT Concat('OPTIMIZE TABLE ', TABLE_NAME, ';') FROM INFORMATION_SCHEMA.TABLES WHERE table_schema='database_name';
DECLARE CONTINUE HANDLER FOR NOT FOUND SET done = TRUE;
OPEN curs;
read_loop: LOOP
FETCH curs INTO val;
IF done THEN
LEAVE read_loop;
END IF;
SET @sql := val;
PREPARE stmt FROM @sql;
EXECUTE stmt;
DEALLOCATE PREPARE stmt;
END LOOP;
CLOSE curs;
END