如何在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个元素,x1和x2.虽然x1是强制性的,但是x2是可选的,可以为null.无论X1和X2有两种选择:x1_option1,x2_option1,x1_option2和x2_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"等?
这是触发器的语法:
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)
| 归档时间: |
|
| 查看次数: |
30573 次 |
| 最近记录: |