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

在触发器失败之前插入MySQL?,mysql,sql,triggers,Mysql,Sql,Triggers,我在Windows XP上运行MySQL 5.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, `Flo

我在Windows XP上运行MySQL 5.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服务器声明UpdateDateTime没有默认值

我已经试过了我能做的一切,所以我想我会问你很多有用的东西;有什么想法吗

干杯, 马蒂恩


PS:X-发布在伦敦Java用户组和Ikasan EIP邮件列表上。

我猜触发器是在验证not null约束后启动的


删除UpdateDateTime上的NOTNULL。

我猜触发器是在验证NOTNULL约束后启动的


删除UpdateDateTime上的NOTNULL。

Hi pascal,这确实解决了它是的,尽管我有点惊讶首先检查了约束。如果其他人对此有进一步的想法,请分享!是的,很奇怪。我假设before触发器发生在约束验证之前……我知道这是公认的答案,但是有人能进一步确认此约束吗?我只是在寻找确定性检查MySQL文档nowHi pascal,这确实解决了它是的,尽管我有点惊讶约束首先被检查。如果其他人对此有进一步的想法,请分享!是的,很奇怪。我假设before触发器发生在约束验证之前……我知道这是公认的答案,但是有人能进一步确认此约束吗?我现在只是在找MySQL文档