MySQL триггер - проблема с условием 'если' - PullRequest
0 голосов
/ 22 сентября 2019

Каждый раз, когда я делаю «обновление» в своей таблице, я хочу вставить сегодняшнюю дату в столбец «дата», но только если эта ячейка содержит «0000-00-00»

Я пытаюсьэтот код:

IF (OLD.date = '0000-00-00') THEN SET NEW.date = now()

Я получаю эту ошибку: You have an error in your SQL syntax...

Что не так?Я думаю, что я уже перепробовал все: /

// РЕДАКТИРОВАТЬ

Весь запрос:

CREATE TRIGGER `my_name` 
BEFORE INSERT ON `my_database` 
FOR EACH ROW 
    IF (OLD.date = '0000-00-00') THEN SET NEW.date = now()

Ошибка: нет старой строки вINSERT триггер

Если я добавлю только это:

CREATE TRIGGER `my_name` 
BEFORE INSERT ON `my_database` 
FOR EACH ROW SET NEW.date = now()

все хорошо ...

1 Ответ

0 голосов
/ 23 сентября 2019

Ответ лежит в документации :

В триггере INSERT может использоваться только NEW.col_name;старая строка отсутствует.

Другие проблемы с вашим кодом:

  • отсутствуют ключевые слова BEGIN и END; вокруг блока кода
  • блок IF должен завершаться END IF;

Триггер должен быть выражен следующим образом:

CREATE TRIGGER my_trigger
BEFORE INSERT ON my_table
FOR EACH ROW 
BEGIN
    IF NEW.date = '0000-00-00' THEN
        SET NEW.date = NOW();
    END IF;
END;

Демонстрация на DB Fiddle:

-- create a test table
CREATE TABLE my_table(id int primary key, `date` DATE);

-- create the trigger
DELIMITER //
CREATE TRIGGER my_trigger
BEFORE INSERT ON my_table
FOR EACH ROW 
BEGIN
    IF NEW.date = '0000-00-00' THEN
        SET NEW.date = NOW();
    END IF;
END;
//

-- insert a record with date value  '000-00-00'
INSERT INTO my_table (id, `date`) values (1, '0000-00-00');

-- check the content of the table
SELECT * FROM my_table;

| id  | date       |
| --- | ---------- |
| 1   | 2019-09-23 |
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...