MySQL триггер, чтобы стрелять при изменении или отбрасывании - PullRequest
4 голосов
/ 28 декабря 2011

Я столкнулся с интересной проблемой.Я хотел бы создать два триггера, триггер1 будет срабатывать на DROP TABLE и триггер2 на ALTER TABLE.Я хотел бы, чтобы trigger1 и trigger2 срабатывали, если какая-либо таблица была удалена или изменена, но, к сожалению, я не знаю синтаксис для этого и не смог найти синтаксис для таких триггеров.В MySQL я могу писать только триггеры, которые срабатывают до / после INSERT, UPDATE или DELETE, но теперь я хотел бы написать триггеры, которые будут применяться на уровне базы данных и будут срабатывать при событиях таблицы.Кто-нибудь может мне помочь?

Ответы [ 3 ]

10 голосов
/ 28 декабря 2011

То, что вы ищете, известно как «триггеры DDL».MySQL не поддерживает их

Это запрос SourceForge , но я не уверен, насколько серьезно кто-либо собирается добавить его

1 голос
/ 28 декабря 2011

Невозможно использовать триггер для операторов отбрасывания. Согласно документации триггер активируется на

  • INSERT : триггер активируется каждый раз, когда в таблицу вставляется новая строка; например, через INSERT, LOAD DATA и REPLACE заявления.

    ОБНОВЛЕНИЕ : Триггер активируется всякий раз, когда изменяется строка; например, с помощью операторов UPDATE.

    УДАЛИТЬ : Триггер активируется всякий раз, когда строка удаляется из таблицы; например, через операторы DELETE и REPLACE. Однако операторы DROP TABLE и TRUNCATE TABLE в таблице не активируют этот триггер, поскольку они не используют DELETE .

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

0 голосов
/ 17 апреля 2013
PROCEDURE `pr_new_type`( IN column_name varchar(10) )
BEGIN
SET @queryText = CONCAT('ALTER TABLE `user_rights` ADD ', column_name, ' BINARY( 9 ) NULL');
PREPARE query FROM @queryText;
EXECUTE query;
DEALLOCATE PREPARE query;
END

проверить это

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...