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
...
我已经创建了一个 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
...