Вопрос:
Как я понимаю следующее в 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….