触发器比较两个日期时间mysql

时间:2017-04-13 14:09:10

标签: mysql triggers

我想要一个比较两个日期时间的触发器。

这是我的触发器:

enter image description here

编辑:

create trigger updateRealisee after update on ladi.DSMSreservation for each row 
begin
declare mnt datetime;
mnt=(select NOW()); 
if :new.date < mnt  then
     :new.realisee = 1;
end if;
end;

1 个答案:

答案 0 :(得分:0)

错误是udpate 触发器后有几个限制:

  • 您无法在视图上创建AFTER触发器。
  • 您无法更新新值。
  • 您无法更新OLD值。

但是,您可以将其更改为插入前触发器。

我已经测试了下面的代码并且它有效。当然,它只适用于您新插入的那些,而不是已经存在的那些。对于已经退出的那些......只需运行:

update TEST.DSMSreservation set realisee = 1 where date < NOW();

然后......以下完整代码创建表,触发器和添加行提供了一个示例,说明它如何在新添加的行上运行:

update TEST.DSMSreservation set realisee = 1 where date < NOW();

create database TEST;
USE TEST;
CREATE TABLE TEST.DSMSreservation
(
   date DATETIME  NULL DEFAULT NULL,
   realisee INT  NULL DEFAULT NULL
);

delimiter $$
create trigger updateRealisee before insert on TEST.DSMSreservation 
for each row
   begin
      IF (new.date < NOW())  THEN
      SET new.realisee = 1;
   end if;
   end;
$$
delimiter ;  

INSERT INTO DSMSreservation VALUES ('2012-06-08 12:13:14',0);
INSERT INTO DSMSreservation VALUES ('2017-06-08 12:13:14',0);
INSERT INTO DSMSreservation VALUES ('2016-06-08 10:13:14',0);
INSERT INTO DSMSreservation (date) VALUES ('2016-06-08 16:13:14');

运行这两个mysql语句将解决您尝试使用原始触发器完成的操作。

如果这已经回答了您的问题,请标记为答案。