jej*_*eje 2 perl transactions dbi
我有几个方法应该只在我的DBI驱动程序类当前进入事务以确保数据完整性的情况下执行.我想写这样的东西:
sub m{
my ($self , $dbh ) = @_ ;
unless( $dbh->isInTransaction()){
die "Use this only within a transaction\n" ;
}
etc ...
}
Run Code Online (Sandbox Code Playgroud)
从begin_work的文档中,我了解到begin_work将AutoCommit在事务处理期间设置为off,并在提交或回滚时将其设置为"on",但我想知道测试AutoCommit属性值是否是一种安全的实现方式isInTransaction.
谢谢你的帮助.
J.
如果启用AutoCommit并使用$ dbh-> begin_work启动事务,则可以测试是否在事务中:
if ($dbh->{BegunWork}) {
Run Code Online (Sandbox Code Playgroud)
如果禁用AutoCommit,DBI没有多大帮助:您只能检查连接到数据库句柄的活动语句:
if ($dbh->{ActiveKids}) {
Run Code Online (Sandbox Code Playgroud)
我从来没有检查过是否有交易活动 - 令我惊讶的是它没有支持它.您应该在一个关于DBI的包装器中自己跟踪事务(或者将方法注入到DBI中).扩展BegunWork以便在禁用AutoCommit时非常有用,看起来像核心DBI修复.