Mysql 如何创建一个触发器来查找一年中的第一天?

Mysql 如何创建一个触发器来查找一年中的第一天?,mysql,triggers,Mysql,Triggers,我有一个表reservationdetails,它有两列,其中一列是creationdate。 我想创建一个触发器来检查创建日期是否是一年中的第一天。如果是,则将值插入到主_id表中。我已经创建了一个触发器,但不知道它是否正确。我的项目是用php编写的 CREATE TRIGGER upd_check BEFORE INSERT ON ColdStorage.ReservationDetails FOR EACH ROW BEGIN IF NEW.creationdate

我有一个表reservationdetails,它有两列,其中一列是creationdate。 我想创建一个触发器来检查创建日期是否是一年中的第一天。如果是,则将值插入到主_id表中。我已经创建了一个触发器,但不知道它是否正确。我的项目是用php编写的

 CREATE TRIGGER upd_check BEFORE INSERT ON ColdStorage.ReservationDetails
    FOR EACH ROW
 BEGIN
     IF NEW.creationdate = DATE_FORMAT(NOW() ,'%Y-01-01') then 
             UPDATE master_ids SET nextOccId="1",nextResId="1",nextAgrnoId="1",nextRecNo="1";
     END if;
 END;

请给我建议一些解决办法。我还想知道如果日期是01-01-yy那么。。它不应该插入我插入的行。

您需要更改分隔符。MySQL看到了第一个;作为CREATETRIGGER语句的结尾,并认为整个语句到此结束。因此,您必须更改分隔符,如下所示:

/* Change the delimiter */
DELIMITER $$

CREATE TRIGGER upd_check BEFORE INSERT ON ColdStorage.ReservationDetails
FOR EACH ROW
BEGIN
    IF NEW.creationdate = DATE_FORMAT(NOW() ,'%Y-01-01') then 
        insert into master_ids values ('0','0','0','0');
    END if;
END$$
/* the CREATE TRIGGER statement ends with new delimiter */

/* change the delimiter back to ; */
DELIMITER ;

我还没有测试过,但看起来不错。让我烦恼的是,这只在一年中的一天有效,其余364(365)天完全没有用,看起来像是一笔开销。

您测试过吗?它是否按预期工作?如果没有,你会收到任何错误信息吗?是的,它给了我错误。逻辑正确吗?它工作正常。但问题是我如何测试它。创建日期是sysdate我希望您有一个测试环境,您可以在其中使用今天的日期而不是01来创建此触发器。一月。那么,如果它在今天起作用,就没有理由不在01.01上起作用。任何一年。