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 SELECT * FROM brst; SIGNAL SQLSTATE '45000' SET MESSAGE_TEXT = '挂号人数超过最大限度'; ROLLBACK; END IF; END $$ DELIMITER ; 1415 - Not allowed to return a result set from a trigger
时间: 2023-06-14 22:06:20 浏览: 168
mysql存储过程之创建(CREATE PROCEDURE)和调用(CALL)及变量创建(DECLARE)和赋值(SET)操作方法
5星 · 资源好评率100%
触发器是在数据库的特定事件发生时自动执行的特殊存储过程。在 MySQL 中,触发器有两种类型:BEFORE 触发器和 AFTER 触发器。BEFORE 触发器在指定操作发生之前执行,因此可以用来验证数据的有效性。AFTER 触发器在指定操作发生之后执行,因此可以用来执行其他操作,例如更新其他表或发送电子邮件通知等。
然而,在触发器中返回结果集是不允许的,因为触发器的主要目的是在指定事件发生时自动执行某些操作,而不是返回数据。如果您需要返回数据,请考虑使用存储过程或函数。
在您的触发器中,您尝试从 SELECT 语句返回结果集,这是不允许的。如果您需要检查一个条件并防止插入操作,您可以使用 SIGNAL 语句生成一个错误,并使用 ROLLBACK 语句回滚插入操作。例如:
```
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 ;
```
这个触发器在插入每一行数据之后执行,如果 `Gh_no` 大于等于 100,则触发器将生成一个错误消息并回滚插入操作。请注意,这个触发器不会返回任何结果集。
阅读全文