普通和XA交易之间的区别是什么?

时间:2014-05-21 15:43:49

标签: php mysql mysqli transactions xa

我对this

有疑问

假设我有几个连接

$conn_site = mysqli_connect("localhost", "us", "ps");
mysqli_select_db("site", $conn_site);
$conn_forum = mysqli_connect("localhost", "us", "ps");
mysqli_select_db("forum", $conn_forum);

并希望在这些连接之间进行交易。由于PHP中的mysqli扩展没有交易支持,我必须像这样手动完成

function begin()
{
    @mysqli_query("BEGIN", $conn_site);
    @mysqli_query("BEGIN", $conn_forum);
}

function commit()
{
    @mysqli_query("COMMIT", $conn_site);
    @mysqli_query("COMMIT", $conn_forum);
}

function rollback()
{
    @mysqli_query("ROLLBACK", $conn_site);
    @mysqli_query("ROLLBACK", $conn_forum);
}

然后使用它

begin();
mysqli_query("insert into users (....)") or rollback();
mysqli_query("insert into forumusers(....)") or rollback();
commit();

因此,由于我手动处理状态,PHP中普通和XA事务之间的区别是什么?如果我在其他连接上启动普通交易,第一个交易将由mysqli扩展自动取消?或者是什么?有人可以澄清一下吗?

1 个答案:

答案 0 :(得分:0)

非常简单:如果你在第二个提交声明中失败了,你会怎么做?第一个不能再回滚(它已经提交),因此您的一致性保证被破坏。解决这个问题的正确方法是2PC。这正是XA所提供的。