Использование триггера MySQL: если столбец имеет значение null set other column null

Вопрос: Как я понимаю следующее в MySQL с триггерами: когда значение некоторого столбца равно null → устанавливает другие значения столбца в null и когда значение некоторого столбца не равно null → установить другие значения столбца в null определение таблицы: CREATE TABLE variations ( id int(10) NOT NULL, x1 int(10) NOT NULL, x2 int(10), x1_option1 BOOL,

Вопрос:

Как я понимаю следующее в 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) );

Идея состоит в том, что у нас есть 2 элемента, x1 и x2. Хотя x1 является обязательным, x2 является необязательным и может быть нулевым. Оба, 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” и т.д. В одном триггере?

Лучший ответ:

Это синтаксис для триггера:

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

у вас, кажется, есть “;” установлен как DELIMETER, который заставляет запрос выполнять, как только он видит “;”. сначала попробуйте изменить его:

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 ; Ответ №2CREATE 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….

Оцените статью
Добавить комментарий