gpt4 book ai didi

mysql - 为什么 mySQL 触发器不保存?

转载 作者:行者123 更新时间:2023-12-04 02:29:25 25 4
gpt4 key购买 nike

我正在尝试创建一个触发器,如果​​已经进行了两个具有相同“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仅(这似乎是您想要的)。

这是一个 Demo on DB Fiddle ;您可以注释或取消注释第三个 insert 以生成错误。

关于mysql - 为什么 mySQL 触发器不保存?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65270622/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com