我正在调用nodejs应用程序的api来更新mysql数据库中的记录。我在上面定义了一个“更新后触发器”。触发器使用sys\u exec调用post restful api,将更新的记录的id传递给另一个api。然后,另一个api获取记录并基于更新后的值,将在同一数据库的另一个表中插入一条新记录。但实际情况是:首先第二个api根据记录的旧值插入新记录,然后旧值更新新值。据我所知,“更新后触发器”保证在更新当前记录后开始执行触发器。有什么建议或帮助吗。
x6h2sr281#
after update触发器在更新记录之后但在提交事务之前运行。通过从触发器调用另一个api,第二个insert很可能在不同的事务中运行。除非你把隔离等级改成 read uncommitted ,则第二个事务只能读取已提交的、因此未更改的记录值。我将从触发器执行第二次插入,而不是从另一个api,因为触发器显然可以看到更新的值。第二个api仍然可以处理它目前正在做的任何事情。我不建议将隔离级别更改为 read uncommitted -除非你真的知道你在做什么。它会产生意想不到的副作用。
read uncommitted
1条答案
按热度按时间x6h2sr281#
after update触发器在更新记录之后但在提交事务之前运行。
通过从触发器调用另一个api,第二个insert很可能在不同的事务中运行。除非你把隔离等级改成
read uncommitted
,则第二个事务只能读取已提交的、因此未更改的记录值。我将从触发器执行第二次插入,而不是从另一个api,因为触发器显然可以看到更新的值。第二个api仍然可以处理它目前正在做的任何事情。
我不建议将隔离级别更改为
read uncommitted
-除非你真的知道你在做什么。它会产生意想不到的副作用。