作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
所以我用 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/
我是一名优秀的程序员,十分优秀!