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

时间:2014-02-04 11:26:05

标签: mysql sql

如何使用触发器在MySQL中实现以下功能: 当某些列的值为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)
);

我们的想法是,我们有2个元素,x1x2。虽然x1是强制性的,但x2是可选的,可以为null。 x1和x2都有两个选项:x1_option1x2_option1x1_option2x2_option2
第一条规则应该是当x2为null时,x2(x2_option1x2_option2)的两个选项也必须为空。
我的尝试:

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$$

引发错误:

#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 
你能帮我弄清楚什么是错的吗?我只是不明白什么意思。

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

3 个答案:

答案 0 :(得分:7)

这是触发器的语法:

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 ;

...您的代码在这里:

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 ;

答案 1 :(得分:1)

你似乎有“;”设置为DELIMITER,一旦看到“;”,就会执行查询。尝试先改变它:

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;//
DELIMITER ;

答案 2 :(得分:0)

CREATE TRIGGER `XXXXXX` BEFORE INSERT ON `XXXXXXXXXXX` FOR EACH ROW BEGIN

IF ( NEW.aaaaaa IS NULL ) THEN 
SET NEW.XXXXXX = NULL;
SET NEW.YYYYYYYYY = NULL;
END IF;
END


Worked for me....