我正在尝试创建一个触发器,如果已经进行了两个具有相同“ St_Obr”的插入操作,则停止插入操作。它没有显示任何错误,但是当我执行SQL脚本时,触发器没有保存。至少在执行SHOW TRIGGERS时未显示;
码:
DELIMITER //
CREATE TRIGGER ob_limit
BEFORE INSERT ON TUP.Lab FOR EACH ROW
BEGIN
SELECT @a = COUNT(*)
FROM TUP.Lab
WHERE St_Obr = NEW.St_Obr;
IF (@a > 2) THEN
SIGNAL SQLSTATE '45000'
SET MESSAGE_TEXT = 'MAX 2!';
END IF;
END //
DELIMITER ;
您希望在对代码进行比较时将计数分配给变量。这将需要使用一个声明的变量并选择它。into
但是我发现跳过变量并直接在if
语句中运行查询更简单:
CREATE TRIGGER ob_limit
BEFORE INSERT ON Lab FOR EACH ROW
BEGIN
IF ((SELECT COUNT(*) FROM Lab WHERE St_Obr = NEW.St_Obr) >= 2) THEN
SIGNAL SQLSTATE '45000'
SET MESSAGE_TEXT = 'MAX 2!';
END IF;
END //
DELIMITER ;
请注意,我将不等式从更改>
为>=2
:前者每行允许三行St_Obr
,而后者只允许2行(这似乎是您想要的)。
这是关于DB Fiddle的演示; 您可以添加注释或取消注释insert
以生成错误。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句