Создать триггер в MySQL на вставке, где он сравнивает поля добавленной строки - PullRequest
0 голосов
/ 17 сентября 2018

Я новичок в триггерах mysql, у меня есть 2 таблицы в базе данных, одна называется tasks, а другая - task_rules.

После вставки нового task_rule я хочу сравнить время поля (которое является объектом времени) с текущим временем.

если оно больше текущего времени, я хочу добавить новую строку в tasks и установить для избавления (в tasks) значение id для вновь добавленного правила и time fieldв tasks до time field недавно добавленной строки .

Я получаю много синтаксических ошибок, и я не знаю, как создать этот триггер.

BEGIN
DECLARE @time TIME
DECLARE @freq VARCHAR(400)
@time = NEW.time
@freq = NEW.frequency
IF (@time > NOW()) AND (@freq == 'daily') THEN
INSERT INTO task_rules ('rid', 'time') VALUES (NEW.id, @time)
END IF
END

Я делаю это с помощью phpmyadmin

1 Ответ

0 голосов
/ 17 сентября 2018

1) пользовательская переменная (предшествующая @) не должна быть объявлена, см. Как объявить переменную в MySQL? 2), чтобы присвоить значение переменной, которую вы должны использовать с помощью инструкции SET 3) каждый оператор должен быть завершен - если вы используете phpmyadmin и терминатор по умолчанию установлен на;измените его и завершите свои утверждения в триггере с помощью;смотри - https://dev.mysql.com/doc/refman/8.0/en/stored-programs-defining.html 4) нулевое безопасное значение равно в mysql - это не == из памяти, это должно быть <=> см. https://dev.mysql.com/doc/refman/8.0/en/comparison-operators.html 5) вам, вероятно, следует установить разделители до и после триггера 6) имена столбцовследует избегать обратными галочками, а не одинарными кавычками.7) для каждого предложения строки, отсутствующего перед оператором начала.

попробуйте это

drop trigger if exists t;
delimiter $$
create trigger t after insert on task
for each row
BEGIN
DECLARE vtime TIME;
DECLARE vfreq VARCHAR(400);
set time = NEW.time;
set freq = NEW.frequency;
IF (vtime > NOW()) AND (vfreq <=> 'daily') THEN
    INSERT INTO task_rules (`rid`, `time`) VALUES (NEW.id, vtime);
END IF;
END $$

delimiter ;

И сделайте обзор https://dev.mysql.com/doc/refman/8.0/en/trigger-syntax.html

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...