MySQL 具有精确值的触发器

MySQL Triggers with Exact Values

我已经创建了一个 MySQL 数据库和几个 table。我正在尝试设置一个触发器,以在计数不等于一组定义值时拒绝插入到名为 ROOM 的 table 中。 如果计数不完全匹配 1、2 或 3,此触发器应拒绝插入。这些是唯一允许的值。

我的触发器目前看起来像这样:

BEGIN
    IF NEW.`count` != 1 OR NEW.`count` != 2 OR NEW.`count` != 3 THEN
        SIGNAL SQLSTATE '50001' SET MESSAGE_TEXT = 'ROOM insert rejected: count must be 1, 2, or 3.';
    END IF; 
END

语法正确,因为 MySQL workbench 没有抱怨。但是,即使我在 table 中插入的值包含 1、2 或 3,它也总是拒绝它,我似乎无法理解为什么。 我也试过:

IF NEW.count NOT BETWEEN 1 AND 3 THEN
        SIGNAL SQLSTATE '50001' SET MESSAGE_TEXT = 'count must be 1, 2, or 3.';
    END IF;

这确实有效,但是它允许将小数插入 table,或者将小数四舍五入而不是拒绝小数。

您写道:

IF NEW.`count` != 1 OR NEW.`count` != 2 OR NEW.`count` != 3 THEN
  ...

无论 NEW.count 的值是多少,其中至少有两项为真。将真值与 OR 组合使整个表达式为真,即使其他项为假。

示例:假设给定行的 NEW.count 为 1。因此表达式为:

IF false OR true OR true THEN
  ...

因为如果NEW.count是1,那么肯定不是2或者3。

你应该用过:

IF NEW.`count` != 1 AND NEW.`count` != 2 AND NEW.`count` != 3 THEN
  ...