gpt4 book ai didi

mysql - 在插入时在 mysql 中创建触发器,它比较添加行的字段

转载 作者:行者123 更新时间:2023-11-30 21:39:30 25 4
gpt4 key购买 nike

我是 mysql 触发器的新手,我在数据库中有 2 个表,一个名为 tasks,另一个名为 task_rules

插入新的 task_rule 后,我想将字段时间(这是一个时间对象)与当前时间进行比较。

如果它大于当前时间,我想在tasks中添加一个新行并将rid(在tasks中)设置为id 新增规则的time字段tasks中的time field新增行<的time field/em>

我收到很多语法错误,而且我不知道如何创建此触发器。

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) 不应声明用户定义的变量(以@开头的变量)参见How to declare a variable in 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) 对于 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

关于mysql - 在插入时在 mysql 中创建触发器,它比较添加行的字段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52366351/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com