我很难按照DBD :: Pg中的说明进行手动交易,或者我只是误解了所说的文档。
我的理解是,如果我想手动管理交易,我应该关闭AutoCommit。
$dbh->{AutoCommit} = 0;
$dbh->begin_work;
但是当我这样做时,我会遇到连续的错误
DBD::Pg::db begin_work failed: Already in a transaction
要使其正常工作,我需要先启用AutoCommit。
$dbh->{AutoCommit} = 1;
$dbh->begin_work;
但这似乎与任何文件都不一致。
我只是误解了吗?
答案 0 :(得分:2)
我的理解是,如果我想手动管理交易,我应该关闭AutoCommit。
正确。
但是,DBD :: Pg会自动为您启动交易。您无法手动启动交易。您最好的选择是关闭自动提交,然后执行:
$dbh->commit;
当你准备提交时。这将提交现有事务并开始新事务。
现在,如果您将autocommit设置为on,那么事务外部存在的任何内容都将成为自己的事务,每个语句一个事务。如果您希望确保手动管理事务,则需要将其关闭。
答案 1 :(得分:1)
我的理解是,如果我想手动管理交易,我应该关闭AutoCommit。
不,恰恰相反。将AutoCommit
设置为0
会启动一个事务,因此您需要将其设置为1
。要自动提交更改,就是让数据库不使用事务,这正是您想要的。