2010-07-16 4 views
2

나는 윈도우 XP에서 MySQL 5.1.48을 실행하고있어 다음과 같은 트리거 테스트가 작동하지 않습니다 내 트리거 테스트에트리거하기 전에 MySQL INSERT가 실패합니까?

-- 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()); 

나는 여전히 UpdateDateTime가 기본값이 없습니다한다는 MySQL 서버를 얻을.

내가 처분 할 때 거의 모든 것을 시도 했으므로 도움이 될만한 질문을 던지 셨다.) 아이디어가 있습니까?

건배, 마티

PS : 런던 자바 사용자 그룹과 Ikasan EIP의 메일 링리스트에 X-기록했다.

답변

0

"not null"제약 조건을 확인한 후에 트리거가 시작된 것 같습니다.

UpdatedDateTime에서 "not null"을 제거하십시오.

+0

안녕하세요 파스칼입니다. 그렇지만 제약 조건을 먼저 확인하는 것이 약간 놀랍지 만 확실히 그렇습니다. 다른 사람이 이것에 대해 더 생각하고 있다면 공유하십시오! –

+0

예, 이상합니다. 제약 조건 유효성 검사 전에 'before'트리거가 발생했다고 가정했을 것입니다 ... – pascal

+0

나는 이것이 허용 된 대답이라는 것을 알고 있지만 누구나이 제한을 더 확인할 수 있습니까? 나는 단지 확실성을 찾고있다. (* MySQL 문서를 지금 확인한다.) – Dan

관련 문제