gpt4 book ai didi

MySQL 触发器使用 : if column is null set other column null

转载 作者:可可西里 更新时间:2023-11-01 07:49:43 25 4
gpt4 key购买 nike

如何使用触发器在 MySQL 中实现以下内容:当某些列的值为空时 -> 将其他列值设置为空
和当某些列的值不为 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 个元素,x1x2x1 是必需的,而 x2 是可选的,可以为空。 x1 和 x2 都有两个选项:x1_option1x2_option1x1_option2x2_option2
第一条规则应该是当 x2 为 null 时,x2 的两个选项(x2_option1x2_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$$

抛出错误:

#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 为 NOT NULL,则 x2_options2 必须为 NULL。总的来说,我认为这可以用与第一条规则相同的方式来完成。我的问题:如何在一个触发器中执行多个“IF”、“ELSE IF”等操作?

最佳答案

这是触发器的语法:

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 ;

关于MySQL 触发器使用 : if column is null set other column null,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21551150/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com