【问题标题】:MySQL INSERT BEFORE TRIGGER Fails?MySQL INSERT BEFORE TRIGGER 失败?
【发布时间】:2011-03-16 23:31:55
【问题描述】:

我在 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-posted 在 London Java User Group 和 Ikasan EIP 邮件列表上。

【问题讨论】:

    标签: mysql sql triggers


    【解决方案1】:

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

    删除 UpdatedDateTime 上的“非空”。

    【讨论】:

    • 嗨,帕斯卡,这确实可以解决问题,尽管我对首先检查约束感到有点惊讶。如果其他人对此有进一步的想法,请分享!
    • 是的,这很奇怪。我会假设before 触发器发生在约束验证之前...
    • 我知道这是公认的答案,但是任何人都可以进一步确认此限制吗?我只是在寻找确定性(现在检查 MySQL 文档
    猜你喜欢
    • 2011-09-18
    • 2017-03-24
    • 2011-03-13
    • 1970-01-01
    • 1970-01-01
    • 2020-11-08
    • 2018-04-05
    • 1970-01-01
    • 2014-03-13
    相关资源
    最近更新 更多