我们如何实际形成分布式事务?

时间:2014-04-04 19:45:29

标签: mysql database perl transactions distributed-transactions

因此,分布式事务是涉及来自多个数据库的表的事务 我无法理解的是以下内容。如果我在数据库DB_Accounts中有表帐户,我可以执行类似(简单示例):

my %attr = (RaiseError=>1, AutoCommit=>0);
my $dbh = DBI->connect($dsn,$username,$password, \%attr);    
my $sql = "INSERT INTO account(id,values) VALUES(?,?)";  
my $sth = $dbh->prepare($sql);  
$sth->execute(1234,1000);    
$dbh->commit; 

所以这是一个事务,因为自动提交已关闭,我显式提交。 我理解它的方式是我们在数据库句柄上实质上是一个“启动事务”,它是一个特定的物理数据库服务器 假设我在数据库DB_Customers中有一个表Customers,我会有像

这样的东西
my %attr = (RaiseError=>1, AutoCommit=>0);
my $dbh = DBI->connect($dsn,$username,$password, \%attr);    
my $sql = "SELECT * FROM CUSTOMERS id IN (?,?,?,?,?)";  
my $sth = $dbh->prepare($sql);  
#some other code here etc    
$dbh->commit; 

因此,如果我们想要从属于不同物理数据库的这两个表中形成一个事务,我们如何形成它? 仅使用autocommit = 0连接到数据库句柄就足够了,然后MySQL会以某种方式确定我们需要在原子上在两个独立的物理服务器中执行操作吗?

0 个答案:

没有答案