我有两张桌子,圆桌和活动桌。一轮有许多事件。
create table round (
round_id INTEGER AUTO_INCREMENT NOT NULL,
round_start_date DATETIME NOT NULL,
round_end_date DATETIME NOT NULL,
CONSTRAINT round_pk PRIMARY KEY (round_id)
);
create table event (
event_id INTEGER AUTO_INCREMENT NOT NULL,
round_id INTEGER NOT NULL,
event_date DATETIME NOT NULL,
CONSTRAINT event_pk PRIMARY KEY (event_id),
CONSTRAINT round_fk FOREIGN KEY (round_id) REFERENCES round (round_id),
);
当向事件表中插入一行时,我想使用触发器将新插入行的 event_date 字段与圆表中其相应条目中的 round_start_date 和 round_end_date 字段进行比较。如果 event_date 早于 round_start_date,round_start_date 应该用新的 event_date 更新。如果 event_date 在 round_end_date 之后,round_end_date 应该用新的 event_date 更新。
这是我的触发器。它不起作用,我不明白为什么。我在网络上找不到任何其他人尝试在触发器中使用日期时间类型的地方,所以我没有参考框架来说明我哪里出错了。
create trigger update_round_date
after insert on event for each row
begin
declare curSdate datetime;
declare curEdate datetime;
set curSdate = (select round_start_date from round where round_id = NEW.round_id);
set curEdate = (select round_end_date from round where round_id = NEW.round_id);
if (NEW.event_date < curSdate) then
update round set round_start_date = NEW.event_date where round_id = NEW.round_id;
else if (NEW.event_date > curEdate) then
update round set round_end_date = NEW.event_date where round_id = NEW.round_id;
end if;
end;
编辑:我根本无法创建触发器。phpMyAdmin 给了我这个错误:“#1064 - 您的 SQL 语法有错误;请查看与您的 MySQL 服务器版本相对应的手册,以在第 4 行的 '' 附近使用正确的语法”
编辑 2:使用分隔符集更新
DELIMITER $$
create trigger update_round_date
after insert on event for each row
begin
declare curSdate datetime;
declare curEdate datetime;
set curSdate = (select round_start_date from round where round_id = NEW.round_id);
set curEdate = (select round_end_date from round where round_id = NEW.round_id);
if (NEW.event_date < curSdate) then
update round set round_start_date = NEW.event_date where round_id = NEW.round_id;
else if (NEW.event_date > curEdate) then
update round set round_end_date = NEW.event_date where round_id = NEW.round_id;
end if;
end$$
这将返回错误:“#1064 - 您的 SQL 语法有错误;请查看与您的 MySQL 服务器版本相对应的手册,了解在第 13 行的 '' 附近使用的正确语法”