如何使用触发器在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个元素,x1
和x2
。虽然x1
是强制性的,但x2
是可选的,可以为null。 x1和x2都有两个选项:x1_option1
,x2_option1
,x1_option2
和x2_option2
。
第一条规则应该是当x2为null时,x2(x2_option1
,x2_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”等?
答案 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 //
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....