如果查询在EVENT中失败,则EVENT是否会失败?

时间:2013-07-30 16:44:40

标签: mysql sql syntax

如果EVENT中的查询不返回OKEVENT会立即失败,是否安全?

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阻止吗?

1 个答案:

答案 0 :(得分:1)

这取决于错误的类型。 As stated in the manual

  

如果 [错误] 条件发生,没有声明处理程序,则   采取的行动取决于条件类:

     

对于SQLEXCEPTION条件,存储的程序终止于   提出条件的声明,好像有一个EXIT处理程序 [即。程序返回] 。   如果程序被另一个存储程序调用,则调用   程序使用处理程序选择规则处理条件   适用于自己的处理程序。

     

对于SQLWARNING条件,程序继续执行,就好像   有一个CONTINUE处理程序。

     

对于NOT FOUND条件,如果条件正常提升,则   行动是继续。如果它是由SIGNAL或RESIGNAL引发的,那么该动作   是退出。

失败的插入会引发SQLEXCEPTION,因此程序会终止(或触发自定义错误处理程序,如果存在这样的处理程序)。

SQLEXCEPTIONSQLWARNINGNOT FOUND的定义在同一手册页中提供)