2013-10-01 3 views
1

После команды ALTER TABLE обычно требуется обновление триггера, который запускается на основе данных, вставленных, обновленных или удаленных на измененной таблице. К сожалению, DROP TRIGGER и CREATE TRIGGER вызывают implicit commits, поэтому нельзя просто разместить эти две команды в одной транзакции, за которой следует фиксация.Alter MySQL Trigger внутри транзакции

Есть ли способ обновить триггер MySQL, чтобы либо старый, либо новый вариант триггера был активен, когда данные в таблице с помощью триггера манипулируют?

ответ

1

Вы можете изменить триггер атомарно используя блокировку таблицы:

LOCK TABLES `mytable` WRITE; 

DELIMITER $$  
    DROP TRIGGER `mytable_tri` $$ 
    CREATE TRIGGER `mytable_tri` AFTER INSERT ON `mytable` 
     FOR EACH ROW BEGIN 
     /* ...... trigger code ......... */ 
    END; 
    $$ 
DELIMITER ; 

UNLOCK TABLES; 

Он работает в MySQL 5.6 и выше.

Я написал blogpost о том, что некоторое время назад: http://vkwww.blogspot.com/2014/07/alter-trigger-in-mysql.html

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