Можно ли применить триггер для таблицы для отслеживания в той же таблице? - PullRequest
0 голосов
/ 07 апреля 2010

Можно ли применить триггер для таблицы для отслеживания в той же таблице?

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

Триггер

, такой как

create trigger "<triggers_name>"  before insert on employee
For each row
Begin
 insert into employee field = timestamp;
end

Ответы [ 2 ]

1 голос
/ 07 апреля 2010

Короче говоря, нет.

Итак, давайте подумаем об этом.

Триггер «до» будет выполнен перед действием (в данном случае действие «вставка»).

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

Ссылка на документы MySQL

"Внутри хранимой функции или триггера запрещено изменять таблицу, которая уже используется (длячтение или запись) оператором, который вызвал функцию или триггер. "

См. эту страницу для получения дополнительной информации.


Тем не менее, есливам нужно отслеживать, когда происходит вставка, я бы рекомендовал использовать вторую таблицу, на которую можно ссылаться через триггер.Вы и создаете FK для таблицы сотрудников, помещаете столбец отметки времени в эту новую таблицу и делаете что-то вроде этого:

for each row
insert into employee_tracking (id, timestamp) on duplicate key update set timestamp = new_timestamp;
0 голосов
/ 07 апреля 2010

Если вы просто хотите отслеживать время вставки, вы можете установить в поле даты значение по умолчанию NOW ().

Интересно, можно ли сделать обновление на только что вставленной таблице? Рекурсию я понимаю со второй вставкой, но, может быть, вы можете обновить ту же таблицу?

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