2015-02-02 2 views
1

это мой первый пост здесь! =]MySQL Triggers: INSERT ON log ДО DELETE ON table

Я создаю триггер для вставки на бревно стола каждый раз, когда кто-то пытается что-то удалить из таблицы

CREATE DEFINER=`root`@`localhost` TRIGGER `user_before_delete`  
BEFORE DELETE ON `user` FOR EACH ROW BEGIN 

INSERT INTO log_alert(id, table_id, name) 
VALUES('99002', OLD.id, OLD.name); 

SIGNAL SQLSTATE '99002' 
SET MESSAGE_TEXT = 'TRYING TO REMOVE A USER!' 
END 

, но проблемы есть: СИГНАЛ SQLSTATE откатить всю операцию! Итак, как мне вставить INGERT на LOG TABLE и PREVENTE из DELETING пользователя?

+2

быстрых/грязного обходного пути: изменение LOG_ALERT быть таблицей MyISAM , там нет транзакций, поэтому нет возможности откатить вашу вставку. –

+0

работал как шарм !!! = D спасибо, брат! – Tiago

ответ

1

Marc B обходной путь работал для меня =]

quick/dirty workaround: change log_alert to be a myisam table. no transactions there, so no way to roll back your insert. – Marc B 15 hours ago 

Просто изменяя LOG_ALERT к типу MyISAM и Вставка обыкновению откатов

0

Перед использованием BEGIN/END блоков, изменить разделитель $$, а затем переключиться обратно:

DELIMITER $$ 

CREATE DEFINER=`root`@`localhost` TRIGGER `user_before_delete`  
BEFORE DELETE ON `user` FOR EACH ROW BEGIN 

INSERT INTO log_alert(id, table_id, name) 
VALUES('99002', OLD.id, OLD.name); 

SIGNAL SQLSTATE '99002' 
SET MESSAGE_TEXT = 'TRYING TO REMOVE A USER!'; 

END $$ 

DELIMITER ; 

Дайте ему попробовать !!!

+0

Это не проблема ... Что случилось, так это то, что мои операции INSERT отбрасывались при вызове SQLSTATE SIGNAL. – Tiago