2016-04-16 2 views
1

Я создал триггер (никогда не делал этого раньше).
Моя цель:
, когда один или несколько строк, которые вставляются в таблицу «userlite»
Если есть строки с «IdLite», как в новой строки, вставленной в таблицу «litedetails»
ТОГДА добавить строку таблица «информация» для каждой подсчитанной строки.Что может сделать сбой триггера, и что произойдет, если он сбой

новых полей строк данных будет:

IdUser -> с новой строки, вставленной в таблицу «userlite»

IdLite -> это то же самое на новой строки, вставленной в таблицу 'userlite' и в строки, выбранных из таблицы

IdEvent '' litedetails -> из выбранных строк

Я использовал следующий код для создания триггера

DELIMITER $$ 
CREATE TRIGGER after_newuserlite 
AFTER INSERT ON userlite 
FOR EACH ROW 
BEGIN 
IF (
    (
    SELECT COUNT(*) 
    FROM litedetails 
    WHERE IdLite = NEW.IdLite 
    ) > 0 
    ) THEN 
    INSERT INTO informations (IdUser, IdLite, IdEvent) 
    SELECT NEW.IdUser AS IdUser, IdLite, IdEvent 
    FROM litedetails 
    WHERE IdLite = NEW.IdLite; 
END IF; 
END; 
$$ 

Я проверил его, и все, кажется, работает, но я волнуюсь за мою неопытность, поэтому мои вопросы:
1) Есть ли что-нибудь, что может вызвать сбой моего триггера?
2) что произойдет, если сработает триггер?
3) Если сбой триггера, запрос, который запустил триггер, будет поддерживать его эффекты?

+0

Вам следует исследовать транзакции, так как они гарантируют, что все действия произойдут или никаких действий не произойдет. –

+0

@TobyAllen Спасибо за ваш комментарий, но, как я уже сказал, я никогда раньше не использовал триггеры, поэтому я не знаю, как правильно его проверить. – genespos

+0

Вы исследовали транзакции? –

ответ

1

В соответствии с комментарием: при использовании таблиц, поддерживающих транзакции, триггеры являются частью инструкции. Если сбой триггера, это приводит к тому, что запрос также вызвал ошибку, что приводит к откату. Это относится к системам хранения InnoDB и TokuDB.

Для MyISAM, который не является транзакционным движком, триггер может выйти из строя, но он не приведет к откату (потому что он не поддерживается этим механизмом хранения).

Триггеры могут выйти из строя по многим причинам, так же как и обычные запросы, но если они не удастся - вы получите сообщение об ошибке/уведомление, которое позволит вам действовать (сообщать пользователю об ошибке, регистрировать сообщение, снова и т. д.).

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