在mysql中创建审计表的问题

时间:2014-07-03 11:36:48

标签: 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 个答案:

答案 0 :(得分:0)

如果您没有设置另一个分隔符而不是;,那么该语句将以第一个;结束,并且您的触发器定义将不完整。您需要告诉 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 ;