MySQL Trigger用法:如果column为null,则将其他列设置为null

Jba*_*ann 3 mysql sql

如何在MySQL中使用触发器实现以下内容:当某些列的值为null时 - >将其他列值设置为null
并且当某列的值不为null时 - >将其他列值设置为null

表定义:

CREATE TABLE variations (  
id int(10) NOT NULL, 
x1 int(10) NOT NULL, 
x2 int(10), 
x1_option1 BOOL, 
x2_option1 BOOL, 
x1_option2 varchar(10), 
x2_option2 varchar(10)
);
Run Code Online (Sandbox Code Playgroud)

我们的想法是,我们有2个元素,x1x2.虽然x1是强制性的,但是x2是可选的,可以为null.无论X1和X2有两种选择:x1_option1,x2_option1,x1_option2x2_option2.
第一个规则应该是当x2为null时,x2(x2_option1,x2_option2)的两个选项也必须为null.
我的尝试:

CREATE 
TRIGGER check_null_x2 BEFORE INSERT 
ON variations
FOR EACH ROW BEGIN
IF NEW.x2 IS NULL THEN 
SET NEW.x2_option1 = NULL;
SET NEW.x2_option2 = NULL;
END IF;
END$$
Run Code Online (Sandbox Code Playgroud)

引发错误:

#1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '' at line 6 
Run Code Online (Sandbox Code Playgroud)

你能帮我弄清楚什么是错的吗?我只是不明白什么意思.

第二条规则应该是只能选择两个选项中的一个.这意味着如果x2_option1是NOT NULL,则x2_options2必须为NULL.总的来说,我认为这可以像第一条规则一样完成.我的问题:如何在一个触发器中执行多个"IF","ELSE IF"等?

jai*_*444 8

这是触发器的语法:

delimiter //
CREATE TRIGGER upd_check BEFORE UPDATE ON account
     FOR EACH ROW
     BEGIN
         IF NEW.amount < 0 THEN
             SET NEW.amount = 0;
         ELSEIF NEW.amount > 100 THEN
            SET NEW.amount = 100;
         END IF;
    END;//
 delimiter ;
Run Code Online (Sandbox Code Playgroud)

......你的代码在这里:

DELIMITER //
CREATE TRIGGER check_null_x2 BEFORE INSERT ON variations
    FOR EACH ROW
    BEGIN
        IF NEW.x2 IS NULL THEN 
            SET NEW.x2_option1 = NULL;
            SET NEW.x2_option2 = NULL;
        END IF;
    END$$ -- THIS LINE SHOULD BE: "END;//"
DELIMITER ;
Run Code Online (Sandbox Code Playgroud)

  • 这个答案没有解释为什么下面的sql语句给出了错误. (4认同)