解决方案:
从MySQL5.5开始,您可以使用'SIGNAL'语法抛出异常:
signal sqlstate '45000' set message_text = 'My Error Message';
状态45000是表示“未处理的用户定义异常”的通用状态。
下面是一个更完整的方法示例:
delimiter //
use test//
create table trigger_test
(
id int not null
)//
drop trigger if exists trg_trigger_test_ins //
create trigger trg_trigger_test_ins before insert on trigger_test
for each row
begin
declare msg varchar(128);
if new.id < 0 then
set msg = concat('MyTriggerError: Trying to insert a negative value in trigger_test: ', cast(new.id as char));
signal sqlstate '45000' set message_text = msg;
end if;
end
//
delimiter ;
-- run the following as seperate statements:
insert into trigger_test values (1), (-1), (2); -- everything fails as one row is bad
select * from trigger_test;
insert into trigger_test values (1); -- succeeds as expected
insert into trigger_test values (-1); -- fails as expected
select * from trigger_test;
如何在"表更新触发器"中抛出一个错误来阻止该表上的更新?
日期:2020-03-23 10:42:24 来源:oir作者:oir
