gpt4 book ai didi

mysql - 删除触发器中的 IF 语句 - 失败

转载 作者:行者123 更新时间:2023-11-29 23:40:49 24 4
gpt4 key购买 nike

所以我用 If 语句尝试了很多不同的事情,但我似乎不知道如何做到这一点。

我不想让触发器删除具有最低 ID 的行(如果它重复出现)。通过重复,我的意思是两行中的号码和用户名相同。

例如

ROW1: ID: 1 , Nr: 1 , UN: MVJ and 

Row2: ID: 2 , Nr: 1 , UN: MVJ

这些是重复出现的,但如果'Nr''UN'不同,它们就不会出现。

这是我迄今为止的尝试。

CREATE TRIGGER no_double_reservations 
AFTER INSERT ON tilmeldte
FOR EACH ROW
WHERE
'SELECT COUNT(*) from tilmeldte WHERE (kursus_nr, username) IN ( SELECT kursus_nr, username FROM tilmeldte GROUP BY kursus_nr, username HAVING count(*) = 2 )' = '2'

DELETE from tilmeldte Where tilmeldingsid =
'Select min(`tilmeldingsid`) from tilmeldte WHERE (kursus_nr, username) IN ( SELECT min(kursus_nr), username FROM tilmeldte GROUP BY kursus_nr, username HAVING count(*) = 2 )'

END;

找到了正确的语法,但发现在 SQL 中移动是不可能的。您无法从选择要删除的行的同一表中删除行。

正确的语法是:

DELIMITER !!
CREATE TRIGGER no_double_reservations
AFTER INSERT ON tilmeldte
FOR EACH ROW BEGIN
IF(
SELECT COUNT(*) from tilmeldte WHERE (kursus_nr, username) IN ( SELECT kursus_nr, username FROM tilmeldte GROUP BY kursus_nr, username HAVING count(*) = 2 ) = 2)
THEN
DELETE from tilmeldte Where tilmeldingsid = (Select min(`tilmeldingsid`) from tilmeldte WHERE (kursus_nr, username) IN ( SELECT min(kursus_nr), username FROM tilmeldte GROUP BY kursus_nr, username HAVING count(*) = 2 ));
END IF;

END!!

DELIMITER ;

最佳答案

您的触发器有一些语法错误,但这些错误并不重要,因为您尝试执行的操作是不可能的:

A stored function or trigger cannot modify a table that is already being used (for reading or writing) by the statement that invoked the function or trigger.

http://dev.mysql.com/doc/refman/5.6/en/stored-program-restrictions.html

MySQL 中的触发器无法修改定义触发器的表中的其他行。这将为无限触发递归提供可能性,例如A 行上的触发器修改了 B 行,B 行触发了修改 A 行的触发器,A 行又触发了修改 B 行的触发器,这...

关于mysql - 删除触发器中的 IF 语句 - 失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26170470/

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