MySQL триггеры: Как узнать название таблицы и поля, которое обновили/удалили, за счет чего отработал триггер

223
26 ноября 2016, 20:12

Задача в следующем: при обновлении записи таблицы нужно создать триггер, который добавит в таблицу изменений пользователя, название таблицы, название поля, действие и время обновления.

Привожу код SQL-запроса на создание триггера:

DELIMITER $$
CREATE TRIGGER upd_check
AFTER UPDATE ON xyz_clients FOR EACH ROW 
BEGIN 
INSERT INTO xyz_changes(user, table_name, record, action, date) 
VALUES(CURRENT_USER, ???, ???, 'update', CURRENT_DATE); 
END

Нужно как-то получить название обновленной страницы и записи. Заранее благодарен за помощь.

Answer 1

Т.к. в MySQL один триггер можно прицепить только к одной таблице, то ее название Вы знаете - это xyz_clients

С названием изменившегося поля немного сложнее. Вам нужно проверить изменилось ли данное конкретное поле

CREATE TRIGGER upd_check
AFTER UPDATE ON xyz_clients FOR EACH ROW 
BEGIN
  IF (NOT OLD.field1 <=> NEW.field1) THEN
    INSERT INTO xyz_changes(user, table_name, record, action, date) 
    VALUES(CURRENT_USER, 'xyz_clients', 'field1', 'update', CURRENT_DATE); 
  END IF;
  IF (NOT OLD.field2 <=> NEW.field2) THEN
    INSERT INTO xyz_changes(user, table_name, record, action, date) 
    VALUES(CURRENT_USER, 'xyz_clients', 'field2', 'update', CURRENT_DATE); 
  END IF;
  ..................
  IF (NOT OLD.fieldN <=> NEW.fieldN) THEN
    INSERT INTO xyz_changes(user, table_name, record, action, date) 
    VALUES(CURRENT_USER, 'xyz_clients', 'fieldN', 'update', CURRENT_DATE); 
  END IF;
END
READ ALSO
Могут ли поля разных таблиц иметь одинаковые названия в MySQL?

Могут ли поля разных таблиц иметь одинаковые названия в MySQL?

ЗдравствуйтеВопрос сформулирован в заголовке

250
Неправильно загружается mp3 файл php

Неправильно загружается mp3 файл php

Здравствуйте, пытаюсь сделать загрузку музыки на сервер, путём POST запроса

308
Избавиться от повторного вывода поля MySQL

Избавиться от повторного вывода поля MySQL

ЗдравствуйтеСоздал БД, создал запрос, все корректно за исключением вывода

217
Название связного поля в MySQL [закрыто]

Название связного поля в MySQL [закрыто]

ЗдравствуйтеСкажите пожалуйста корректна ли будет строка

221