代码之家  ›  专栏  ›  技术社区  ›  Martijn Verburg

在触发器失败之前插入MySQL?

  •  2
  • Martijn Verburg  · 技术社区  · 14 年前

    我在Windows XP上运行MySQL5.1.48,以下触发器测试不起作用:

    -- Drop the old table
    DROP TABLE IF EXISTS `ikasan01`.`ikasanwiretap`;
    
    -- Create
    CREATE TABLE  `ikasan01`.`ikasanwiretap` (
     `Id` bigint(20) NOT NULL AUTO_INCREMENT,
     `ModuleName` varchar(255) NOT NULL,
     `FlowName` varchar(255) NOT NULL,
     `ComponentName` varchar(255) NOT NULL,
     `EventId` varchar(255) NOT NULL,
     `PayloadId` varchar(255) NOT NULL,
     `PayloadContent` varchar(255) NOT NULL,
     `CreatedDateTime` datetime NOT NULL,
     `UpdatedDateTime` datetime NOT NULL,
     `Expiry` datetime NOT NULL,
     PRIMARY KEY (`Id`)
    ) ENGINE=InnoDB DEFAULT CHARSET=latin1;
    
    -- In order to use now() as a DEFAULT value on a datetime column we
    have to do it via a BEFORE INSERT TRIGGER
    CREATE TRIGGER defaultUpdateDateTime
    BEFORE INSERT ON ikasanwiretap FOR EACH ROW
    SET NEW.UpdatedDateTime = now();
    
    -- Test the trigger
    insert into IkasanWiretap (ModuleName, FlowName, ComponentName,
    EventId, PayloadId, PayloadContent, CreatedDateTime, Expiry) values
    ('3', '3', '3', '3', '3', '3', now(), now());
    

    在我的触发器测试中,我仍然得到MySQL服务器,声明updatedDateTime没有默认值。

    我已经尝试了所有我可以支配的事情,所以我想我会问你很多有用的事;)有什么想法吗?

    干杯, 马蒂恩

    PS:X张贴在伦敦Java用户组和IKASAN EIP邮件列表中。

    1 回复  |  直到 13 年前
        1
  •  0
  •   pascal    14 年前

    我想触发器是在“非空”约束被验证之后启动的。

    删除updatedDateTime上的“not null”。