我已经阅读MySql5.0评论流上 创建页面触发 我想询问社会如果建议是好的和他们是否仍然适用于5.1.我已经注意到在玩触发今天,这是不可能的更新的领域中旧表使用之后更新。

  1. 小心前的触发器。限制可能发生,特别是如果您使用的少引擎,其中插入将会失败,但是行动从你的触发之前将会成功。
  2. 前使用的触发器,主要用于约束或规则,而不是交易,调整新的。* 列应被罚款。
  3. 坚持后触发对于大多数其他行动,例如插入一个历史表或更新非正规化.
有帮助吗?

解决方案

是的。据我所知,MySQL5.1没有作出任何变化的语义如何触发工作。MySQL试图支持ANSI/ISO SQL规范触发的语义。

你可以想象一下,有一系列的操作运行为的行为写入数据库:

  1. 运行前,触发器
  2. 评估的约束,强制执行 NOT NULL, ,适用 DEFAULT
  3. 写行为的数据库
  4. 更新索引
  5. 运行之后,触发器

一旦你到达后触发的,它是太晚改变价值观在该行。在一些数据库,可以设置 NEW.somecolumn = 1234 但这种改变是默默丢弃的后触发的完成。在其他数据库,它可以帮助你理解你的错误,给你一个错误的时候,你定义的触发或在运行的触发器。

后触发器的最佳用于额外采取的行动的结果INSERT/UPDATE行,诸如审计日志。对于一件事情,MySQL只允许每一个触发行动的每个表格,所以如果你还用一种触发之前改变价值观和强制执行的业务规则,现在你至少可以保持的额外的行动在一个单独的触发器。这使它更容易更新一个或另一个。

其他考虑因素是,你可能应该做的额外行动只 你知道该行已经成功保存。E.g。它不会登录权限的改变之前,触发器,然后有所改变时中止,因为没有空约束。

对于删除行动,在需要删除的依赖的行其他表中,您可能仍然需要做的是,在一个前所触发的。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top