解决方案:
从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