繁体   English   中英

普通交易和XA交易有什么区别?

[英]What's the difference between a plain and XA transaction?

对此有疑问

假设我有几个联系

$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扩展自动取消吗? 要不然是啥? 有人可以澄清吗?

很简单:如果第二个commit语句失败,该怎么办? 第一个不能再回滚(已经提交),因此您的一致性保证已被破坏。 解决此问题的正确方法是2PC。 这正是XA所提供的。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM