我一直在创建触发器页面上阅读MySql 5.0注释流 ,我想询问社区是否建议是否良好以及它们是否仍然适用于5.1.我今天注意到使用触发器的原因是使用AFTER UPDATE更新旧表中的字段是不可能的.
Bil*_*win 13
是.AFAIK,MySQL 5.1没有对触发器工作方式的语义做任何改变.MySQL尝试支持触发语义的ANSI/ISO SQL规范.
您可以想象,当一行写入数据库时,会运行一系列操作:
NOT NULL,应用DEFAULT值一旦你到达AFTER触发器,改变行中的值为时已晚.在某些数据库中,您可以设置,NEW.somecolumn = 1234但在AFTER触发器完成时会自动丢弃此更改.在其他数据库中,它可以通过在定义触发器或运行触发器时给出错误来帮助您理解错误.
AFTER触发器最适合用于行的INSERT/UPDATE的额外操作,例如您提到的审计日志记录.首先,MySQL每个表只允许每个操作一个触发器,因此如果您还使用BEFORE触发器来更改值并强制执行业务规则,那么现在您至少可以将额外的操作保存在单独的触发器中.这样可以更容易地更新其中一个.
另一个考虑因素是,只有在知道行已成功保存后,才应该执行额外的操作.例如,在BEFORE触发器中记录更改是不正确的,然后由于NOT NULL约束而使更改中止.
对于需要在其他表中删除相关行的DELETE操作,您可能仍需要在BEFORE触发器中执行此操作.