【发布时间】:2018-03-12 21:55:39
【问题描述】:
我在 mysql 上创建了两个数据库,每个数据库都包含一个名为“test”的表。
create table db1.test(
test_id int primary key auto_increment,
value int(5) not null);
create table db2.test(
test_id int primary key auto_increment,
value int(5) not null);
根据PDO transaction across multiple databases, is it possible?,PDO 不支持多个数据库内的事务,但我对我的测试结果感到惊讶。这是我的代码。
$con = new PDO("mysql:host=localhost", "root", "", array(PDO::ATTR_ERRMODE=>PDO::ERRMODE_EXCEPTION));
try {
$con->beginTransaction();
$con->exec("use db1");
$stmt = $con->prepare("insert into test (value) values(?)");
$stmt->execute([1]);
$con->exec("use db2");
$stmt = $con->prepare("insert into test (value) values(?)");
$stmt->execute([1]);
$con->commit();
} catch (Exception $e) {
$con->rollback();
echo $e->getMessage();
}
代码成功插入,没有问题。为了测试我开始的事务将不会工作,因为我使用了两个数据库,我删除了 db2.test 并希望 db1.test 上的插入仍然成功。 db2.test 上的插入显然失败了,但是 db1.test 也没有提交。
我很困惑。当我明明使用两个数据库时,为什么 PDO 会执行事务?
另外,这个问题的答案: Multiple database and transactions
那不会做深蹲。事务被隔离在一个单一的 “数据库”。为了让交易跨越多个 数据库,你需要所谓的“分布式事务 管理”。
虽然这个问题的代码使用了两个连接。
【问题讨论】:
标签: php mysql database pdo transactions