题
我已经阅读MySql5.0评论流上 创建页面触发 我想询问社会如果建议是好的和他们是否仍然适用于5.1.我已经注意到在玩触发今天,这是不可能的更新的领域中旧表使用之后更新。
- 小心前的触发器。限制可能发生,特别是如果您使用的少引擎,其中插入将会失败,但是行动从你的触发之前将会成功。
- 前使用的触发器,主要用于约束或规则,而不是交易,调整新的。* 列应被罚款。
- 坚持后触发对于大多数其他行动,例如插入一个历史表或更新非正规化.
解决方案
是的。据我所知,MySQL5.1没有作出任何变化的语义如何触发工作。MySQL试图支持ANSI/ISO SQL规范触发的语义。
你可以想象一下,有一系列的操作运行为的行为写入数据库:
- 运行前,触发器
- 评估的约束,强制执行
NOT NULL
, ,适用DEFAULT
值 - 写行为的数据库
- 更新索引
- 运行之后,触发器
一旦你到达后触发的,它是太晚改变价值观在该行。在一些数据库,可以设置 NEW.somecolumn = 1234
但这种改变是默默丢弃的后触发的完成。在其他数据库,它可以帮助你理解你的错误,给你一个错误的时候,你定义的触发或在运行的触发器。
后触发器的最佳用于额外采取的行动的结果INSERT/UPDATE行,诸如审计日志。对于一件事情,MySQL只允许每一个触发行动的每个表格,所以如果你还用一种触发之前改变价值观和强制执行的业务规则,现在你至少可以保持的额外的行动在一个单独的触发器。这使它更容易更新一个或另一个。
其他考虑因素是,你可能应该做的额外行动只 后 你知道该行已经成功保存。E.g。它不会登录权限的改变之前,触发器,然后有所改变时中止,因为没有空约束。
对于删除行动,在需要删除的依赖的行其他表中,您可能仍然需要做的是,在一个前所触发的。
不隶属于 StackOverflow