如果EVENT
中的查询不返回OK
,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
阻止吗?
答案 0 :(得分:1)
这取决于错误的类型。 As stated in the manual:
如果 [错误] 条件发生,没有声明处理程序,则 采取的行动取决于条件类:
对于SQLEXCEPTION条件,存储的程序终止于 提出条件的声明,好像有一个EXIT处理程序 [即。程序返回] 。 如果程序被另一个存储程序调用,则调用 程序使用处理程序选择规则处理条件 适用于自己的处理程序。
对于SQLWARNING条件,程序继续执行,就好像 有一个CONTINUE处理程序。
对于NOT FOUND条件,如果条件正常提升,则 行动是继续。如果它是由SIGNAL或RESIGNAL引发的,那么该动作 是退出。
失败的插入会引发SQLEXCEPTION
,因此程序会终止(或触发自定义错误处理程序,如果存在这样的处理程序)。
(SQLEXCEPTION
,SQLWARNING
和NOT FOUND
的定义在同一手册页中提供)