假设如果EVENT
内的查询不是OK
,EVENT
会立即失败吗?如果查询在事件中失败,EVENT是否失败?
DELETE
是破坏性的,所以我想确保在(相同记录)是DELETEd
之前先前的查询成功。
use argus_dnsdb;
DELIMITER |
CREATE EVENT `dnsdb_rotator`
ON SCHEDULE
EVERY 1 DAY
STARTS date_format(now(), '%Y-%m-%d 00:00:05')
ON COMPLETION NOT PRESERVE
ENABLE
DO BEGIN
set @target_table_name=CONCAT('`argus_dnsdb`.`',date_format(date_sub(now(),interval 1 day), '%Y%m%d'),'`');
set @create_table_stmt_str = CONCAT('CREATE TABLE ',@target_table_name,' like `argus_dnsdb`.`main`;');
PREPARE create_table_stmt FROM @create_table_stmt_str;
EXECUTE create_table_stmt;
DEALLOCATE PREPARE create_table_stmt;
set @a=unix_timestamp(date_format(now(), '%Y-%m-%d 00:00:00'));
set @insert_stmt_str = CONCAT('INSERT INTO ',@target_table_name,' SELECT * FROM `argus_dnsdb`.`main` WHERE qtime < ',@a,' ;');
PREPARE insert_stmt FROM @insert_stmt_str;
EXECUTE insert_stmt;
DEALLOCATE PREPARE insert_stmt;
DELETE FROM `argus_dnsdb`.`main` WHERE qtime < @a ;
END;
|
DELIMITER ;
在这种情况下,如果EXECUTE insert_stmt;
失败,将EVENT
停止执行DO
块?
完美的感谢! 'DECLAREing'' EXIT HANDLER'来处理特定的'SQLSTATE'将是另一种选择,但在这种情况下是不必要的。由于系统限制,赏金将在3小时内颁发。 – mbrownnyc