gpt4 book ai didi

php - 普通事务和 XA 事务有什么区别?

转载 作者:行者123 更新时间:2023-11-30 00:14:18 27 4
gpt4 key购买 nike

我有一个关于 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 扩展自动取消?或者是什么?有人可以澄清一下吗?

最佳答案

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

关于php - 普通事务和 XA 事务有什么区别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23787967/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com