2016-12-23 2 views
1

Я получил эту datebase структуру:триггера MYSQL после вставки => вставить вторую таблицу => перед тем триггер вставки не работает

CREATE TABLE `user` (
    `usr_id` bigint(20) NOT NULL AUTO_INCREMENT, 
    `usr_mail` varchar(64) NOT NULL, 
    `usr_creationdate` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP, 
    PRIMARY KEY (`usr_id`) 
); 

CREATE TABLE `user_activation` (
    `usract_id` bigint(20) NOT NULL AUTO_INCREMENT, 
    `usr_id` bigint(20) NOT NULL, 
    `usract_key` text NOT NULL, 
    `usract_used` int(11) NOT NULL DEFAULT '0', 
    `usract_creationdate` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP, 
    `usract_usagedate` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP, 
    `usract_expiredate` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP 
); 


CREATE TRIGGER `USER_INSERT_ADD_ACTIVATION` AFTER INSERT ON `user` 
FOR EACH ROW 
INSERT INTO user_activation (usr_id, usract_key) 
VALUES (NEW.usr_id, UUID()); 


CREATE TRIGGER `USRACT_INSER_SET_EXPIREDATA` BEFORE INSERT ON `user_activation` 
FOR EACH ROW 
SET NEW.usract_expiredate = DATE_ADD(NOW(), INTERVAL 1 DAY); 

Когда я вставить данные в таблицу user_activation моего user_activation.usract_expiredate обновляется на следующий день. Если я вставляю данные в таблицу user, строка вставляется в user_activation, но user_activation.usract_expiredate не будет установлена ​​на следующий день. Кажется, что второй триггер не выполняется.

Я делаю что-то неправильно с триггерами?

ответ

0

Для этого вам нужен только один триггер.

DROP TRIGGER `USRACT_INSER_SET_EXPIREDATA`; 
DROP TRIGGER `USER_INSERT_ADD_ACTIVATION`; 

CREATE TRIGGER `USER_INSERT_ADD_ACTIVATION` AFTER INSERT ON `user` 
FOR EACH ROW 
INSERT INTO user_activation (usr_id, usract_key,usract_expiredate) 
VALUES (NEW.usr_id, UUID(),DATE_ADD(NOW(), INTERVAL 1 DAY)); 
+0

Я знаю, что я мог бы решить мою проблему с установкой времени в другом триггере. Но поскольку я планирую иметь больше таблиц, которые используют таблицу 'user_activation', мне не нравится идея, что я должен записать ее во все триггеры, которые я настраиваю. Обычно нужно вызвать второй триггер. Я просто хотел бы знать, почему это не называется. – MadddinTribleD

+1

Ваш триггер (тот, который я предложил удалить) на самом деле вызывает. но это значение не используется, потому что вы, вероятно, знаете какой-то другой код или триггер, который его переопределяет. – e4c5

+0

Также имейте в виду, что наличие нескольких триггеров, запускаемых для каждой вставки, замедляет эти вставки. – e4c5

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