我正在为我的学校图书馆做一个项目。有一个会员表,其中包含注册日期,到期日期和续订日期属性。现在,当一个新会员注册时,我希望有一个触发器,它将插入注册日期,续订日期的当前日期,并且由于会员资格有效期为2年,因此到期日应设置为距当前日期两年。现在我已经为此编写了触发器,但是当我去插入新成员时,我收到以下错误。
这是我的触发器
DELIMITER $$
create trigger regDate
before insert on member
for each row begin
set @currentDate = CURDATE();
set @expDate = ADDDATE(@currentDate, INTERVAL 2 year);
insert into member(regDate, expDate, renewDate) values (@currentDate, @expDate, @currentDate);
end$$
我已经找到了一个解决方案,只有在有人说这是MySQL中的错误时才会走到尽头!
答案 0 :(得分:2)
请参阅trigger FAQ:
触发器可以访问自己的表中的旧数据和新数据。触发器也可以影响其他表,但是不允许修改已经被调用函数或触发器的语句使用(用于读取或写入)的表。(在MySQL 5.0之前)。 10,触发器不能修改其他表。)
在这种情况下,您在触发器中没有insert
显式,只需更改new.<columnName>
值,触发器将使用该值自动修改行。
换句话说,替换:
insert into member(regDate, expDate, renewDate) values (
@currentDate, @expDate, @currentDate);
使用:
set new.regDate = @currentDate;
set new.expDate = @expDate;
set new.renewDate = @currentDate;
trigger syntax page上有一些不错的例子,请记住可以从old.<columnName>
访问旧的行数据值。
答案 1 :(得分:1)
尝试通过NEW
分配值:
DELIMITER $$
create trigger regDate
before insert on member
for each row begin
set @currentDate = CURDATE();
set @expDate = ADDDATE(@currentDate, INTERVAL 2 year);
set new.regDate = @currentDate;
set new.expDate = @expDate;
set new.renewDate= @currentDate;
end$$