我正在使用MySQL5.6。插入或更新后,在触发器内部调用过程,那么如何将新对象和旧对象从触发器传递到过程?
发布于 2015-06-27 19:37:53
我发现了这个:来源
为什么您不应该从触发器中调用存储过程,这是很有原因的。触发器本质上是存储过程。他们的行为几乎很难倒退。即使所有底层表都是InnoDB,您也将体验到共享行锁的比例量和排它锁的恼人间歇性。如果触发器正在操作表,而插入和更新被停滞以在每个触发器调用中执行繁重的MVCC,则情况就是如此。不要忘记触发器需要开销。事实上,根据MySQL存储过程编程,标题“触发器开销”下的第256页说明如下:重要的是要记住,触发器必然会增加它们应用到的DML语句的开销。开销的实际数量将取决于触发器的性质,但是--当所有MySQL触发器对每一行执行时--处理大量行的语句的开销会迅速累积。因此,您应该避免在触发器中放置任何昂贵的SQL语句或过程代码。触发开销的扩展解释见第529-531页。该部分的结论点如下:这里的教训是:由于触发器代码将对受DML语句影响的每一行执行一次,因此触发器很容易成为DML性能中最重要的因素。触发器正文中的代码需要尽可能轻量级,并且--特别是--触发器中的任何SQL语句都应该尽可能地被索引所支持。
检查RolandoMySQLDBA的答案。
https://dba.stackexchange.com/questions/105307
复制相似问题