在mysql的insert中创建触发器,比较添加行的字段

hgncfbus  于 2021-06-21  发布在  Mysql
关注(0)|答案(1)|浏览(276)

我是mysql触发器的新手,我在一个数据库中有两个表,一个叫做 tasks 另一个是 task_rules .
一次新的 task_rule 是插入的,我想比较字段时间(它是一个时间对象)和当前时间。
如果大于当前时间,我想在中添加新行 tasks 把…放在 tasks )至 id 新添加的规则,以及 time fieldtaskstime 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做的

qlzsbp2j

qlzsbp2j1#

1) 不应该声明用户定义的变量(前面有@的)请参见如何在mysql中声明变量?2) 要给变量赋值,必须使用set语句3)必须终止每条语句-如果使用phpmyadmin,并且默认终止符设置为;更改它并用终止触发器中的语句;见-https://dev.mysql.com/doc/refman/8.0/en/stored-programs-defining.html 4) mysql中的null safe equals不是==从内存中应该是<=>请参见https://dev.mysql.com/doc/refman/8.0/en/comparison-operators.html 5) 您可能应该在触发器前后设置分隔符6)列名应该用反勾号转义,而不是单个引用。7) for each row子句before begin语句。
试试这个

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

相关问题