#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 ;