DELIMITER $$ CREATE TRIGGER ghxz AFTER INSERT ON GH FOR EACH ROW BEGIN DECLARE rs VARCHAR(8); SET rs = NEW.Gh_no; IF rs >= 100 THEN SIGNAL SQLSTATE '45000' SET MESSAGE_TEXT = '挂号人数超过最大限度'; ROLLBACK; END IF; END $$ DELIMITER ; 1422 - Explicit or implicit commit is not allowed in stored function or trigger.
时间: 2023-06-14 21:05:44 浏览: 72
mysql存储过程之创建(CREATE PROCEDURE)和调用(CALL)及变量创建(DECLARE)和赋值(SET)操作方法
5星 · 资源好评率100%
这个错误提示是因为在触发器中使用了ROLLBACK语句,而在触发器中不允许使用COMMIT或ROLLBACK语句,因为这些语句会影响到整个事务,而不只是触发器本身。
为了解决这个问题,你可以考虑使用SIGNAL语句来抛出一个异常,从而回滚事务。例如:
DELIMITER $$
CREATE TRIGGER ghxz
AFTER INSERT ON GH
FOR EACH ROW
BEGIN
DECLARE rs VARCHAR(8);
SET rs = NEW.Gh_no;
IF rs >= 100 THEN
SIGNAL SQLSTATE '45000' SET MESSAGE_TEXT = '挂号人数超过最大限度';
END IF;
END $$
DELIMITER ;
这个触发器会在插入GH表的每一行数据后执行。如果插入的行的Gh_no值大于等于100,就会抛出一个45000 SQLSTATE的异常,并且回滚事务。
阅读全文