作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
对模糊的标题表示歉意 - 希望这可以更好地解释:
以下触发器在更新后触发(按设计),但两个 IF
当 prospectid
都没有时,语句将被触发或propertyid
字段已更新。
所以第一个问题是,IF
是否有问题?逻辑?我确实记得 <>
有一些问题与 <=>
...?
CREATE TRIGGER myTrig AFTER UPDATE ON t_enquiries
FOR EACH ROW
BEGIN
IF (NEW.prospectid <=> OLD.prospectid) OR (NEW.propertyid <=> OLD.propertyid) THEN
IF (NEW.prospectid IS NOT NULL) AND (NEW.propertyid IS NOT NULL) THEN
INSERT INTO t_prospect_property_link (prospectid, propertyid, remaininginspections) VALUES (NEW.prospectid, NEW.propertyid, 10)
ON DUPLICATE KEY UPDATE subscribed = 1, remaininginspections = 10;
END IF;
END IF;
END
如果我的IF
语句没问题,当然这个触发触发器的语句不会导致 prospectid
和propertyid
字段做一些事情来使 IF
评价为真???
UPDATE t_enquiries SET recordstatus = 3, enquirystatus = 1 WHERE id = xxx;
最佳答案
<>
是一个“不等于”比较运算符。 a <> b
当 a 和 b 均为非 NULL 并且彼此不相等时,计算结果为 TRUE。
<=>
(spaceship) 运算符是空安全相等比较运算符。
a <=> b
是 ( a = b OR ( a IS NULL AND b IS NULL ))
的简写
一旦我们很好地掌握了 SQL 三值 bool 逻辑(TRUE、FALSE、NULL),运算符就不应该出现任何困难。
一个可能令人困惑的地方是运算符的优先级顺序。但幸运的是,MySQL 引用手册中对此进行了记录:https://dev.mysql.com/doc/refman/5.7/en/operator-precedence.html
我们可以使用括号来覆盖优先顺序,当 OR
时我们经常需要这样做。和AND
运营商参与其中。
目前尚不清楚您想要实现什么目标,所以我们只是猜测。
也许您想要检查列的值是否已更改。
IF NOT NEW.col <=> OLD.col THEN
-- value of col has changed
END IF;
关于MySQL IF 逻辑内部触发器与 NEW 和 OLD,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42264450/
我是一名优秀的程序员,十分优秀!