2
我在Windows XP上運行MySQL 48年5月1日和以下觸發測試不起作用:MySQL INSERT BEFORE TRIGGER失敗?
-- 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郵件列表。
嗨帕斯卡爾,這當然確實解決它是的,雖然我有點驚訝,先約束檢查。如果其他人對此有進一步的想法,請分享! – 2010-07-16 14:05:53
是的,這很奇怪。我會假設'之前'觸發發生在約束驗證之前... – pascal 2010-07-16 15:33:30
我明白這是公認的答案,但是任何人都可以進一步證實這一限制嗎?我只是在尋找確定性(*現在檢查MySQL文檔*) – Dan 2012-04-17 23:43:42