2010-07-16 2 views
2

Я бегу MySQL 5.1.48 на Windows XP и следующий тест триггер не работает:Ошибка 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()); 

На моем спускового тесте я все еще получаю сервер MySQL о том, что UpdateDateTime не имеет значения по умолчанию.

Я пробовал все, что у меня в своем распоряжении, поэтому я думал, что попрошу вас помочь много;) Любые идеи?

Приветствия, Martijn

PS: X-размещены на London Java User Group и список рассылки Ikasan EIP.

ответ

0

Я думаю, что триггер запускается после проверки «не нулевых» ограничений.

Удалить значение «не null» на UpdateDateTime.

+0

Привет, паскаль, это, безусловно, решает его. Да, хотя я немного удивлен, что сначала проверяется ограничение. Если кто-то еще подумает об этом, то, пожалуйста, поделитесь! –

+0

Да, это странно. Я бы предположил, что триггер 'before' происходит до проверки ограничений ... – pascal

+0

Я понимаю, что это принятый ответ, однако кто-нибудь может подтвердить это ограничение? Я просто ищу уверенность (* теперь проверяю документы MySQL *) – Dan

Смежные вопросы