我創建了一個 MySQL 資料庫和幾個表。我試圖在計數不等于一組定義的值時設定一個觸發器,以拒絕插入一個名為 ROOM 的表。如果計數與 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 作業臺沒有抱怨。但是,即使我在表中插入的值包括 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;
這確實有效,但是它允許將小數插入表中,或者將小數向上舍入而不是拒絕它。
uj5u.com熱心網友回復:
你寫了:
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
...
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/461707.html
下一篇:mySQL插入新行并允許重復值
