【问题标题】:Perl DBI - Parallel TransactionsPerl DBI - 并行事务
【发布时间】:2018-01-08 02:10:00
【问题描述】:

我有一个带有 DBI 的 perl 脚本,它按顺序对 MySQL 数据库中的多个表执行各种 DML 操作。

我在我的 perl 脚本中使用 dbh->begin_workeval 实现了事务。现在,我运行我的脚本一次,一段时间后我再次运行它,从而向我的数据库启动两个事务。当我第二次运行脚本时,第一个事务已经完成了对第五张表的操作,但我的第二个事务甚至在第一个表上也等待执行操作。

我是否可以让脚本并行执行,以便第二个事务能够在第一个事务在它之前运行时对第一个表执行操作?

【问题讨论】:

  • 不是事务方式...您的第二个事务不应该读取尚未提交的数据。如果你的隔离级别是read uncommitted,你可能会做一些事情。我不会。
  • “我在我的 perl 脚本中使用 dbh->begin_workeval 实现了事务” 禁用 RaiseError 并检查每个操作的返回状态要干净得多。

标签: mysql perl transactions dbi


【解决方案1】:

每个数据库都有自己的事务隔离级别。阅读类似这篇文章的内容:http://www.oracle.com/technetwork/issue-archive/2005/05-nov/o65asktom-082389.html

因此,由于同时运行的事务之间的竞争条件,每个事务都可能被锁定和/或放弃。

并阅读http://search.cpan.org/~timb/DBI-1.636/DBI.pm#Transactions 章节以使用 RaiseError。

【讨论】:

    猜你喜欢
    • 2011-07-03
    • 1970-01-01
    • 2016-06-04
    • 2016-10-31
    • 2018-10-17
    • 2013-10-27
    • 2011-05-11
    • 2019-02-01
    • 1970-01-01
    相关资源
    最近更新 更多