Проблемы при создании таблицы аудита в mysql

#mysql

#mysql

Вопрос:

У меня есть таблица с именем client_property и другая таблица с аналогичной структурой под названием client_property_version . Что я пытаюсь сделать, так это то, что всякий раз, когда кто-то обновляет строку в client_property таблице, вся строка перед обновлением должна вставляться в client_property_version , чтобы у меня могло быть что-то вроде таблицы аудита. Я пытался сделать что-то вроде этого:

 CREATE TRIGGER client_property_audit BEFORE UPDATE ON client_property
FOR EACH ROW BEGIN
INSERT INTO `client_property_version` select * from client_property where property_id = OLD.property_id;
END;
  

но это выдает синтаксическую ошибку. Кто-нибудь может подсказать мне лучший способ сделать то же самое?
PS: Я не сохраняю ни одного уникального столбца в client_property_version таблице.

Комментарии:

1. Какую ошибку вы получаете? Вы определили другой разделитель вокруг определения триггера?

2. MySQL said: Documentation #1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '' at line 3

Ответ №1:

Если вы не установите другой разделитель, чем ; , то инструкция завершится на первой ; , и ваше определение триггера будет неполным. Вам нужно сообщить MySQL, что оператор должен заканчиваться на определенном вами разделителе. После этого вы можете установить разделитель обратно с помощью delimiter ;

 delimiter |
CREATE TRIGGER client_property_audit BEFORE UPDATE ON client_property
FOR EACH ROW BEGIN
   INSERT INTO `client_property_version` 
   select * from client_property where property_id = OLD.property_id;
END;
|
delimiter ;