gpt4 book ai didi

php - 单个 InnoDB 表上的多个事务可能吗?

转载 作者:行者123 更新时间:2023-11-29 01:51:52 27 4
gpt4 key购买 nike

这是一个关于 SQL 的问题,但目的是创建一个 php 脚本。

语境

假设我有一个包含 2 个表的数据库(在 InnoDB 引擎上设置):

  • 用户
  • 购物车

现在有 2 个用户访问我的应用程序(在 php 中),并且都启动了一个执行以下算法的网页:

  1. 打开连接
  2. 开启交易
  3. 在用户表中插入一个新行
  4. 提交交易

问题

SQL 可以处理同一张表上的 2 个事务吗?

PhP代码(备案)

$host = 'localhost';
$database = 'user';
$user = 'root';
$password = '';
$encode = 'utf8';
$dsn = "mysql:host=$host;dbname=$database;charset=$encode";
$pdo = null;

try {
$pdo = new PDO($dsn, $user, $password);
$query = "INSERT INTO user (name, city) VALUES ('test', 'Paris')";
$pdo->beginTransaction();

if( $pdo->inTransaction() ) {
// Can I still launch the query ?
}
else {
// Or should I stop here ?
}

if( $pdo->query( $query ) ) {
$pdo->commit();
}
else {
$pdo->rollBack();
}
}
catch( PDOException $e ) {
print_r($pdo->errorInfo());
}

最佳答案

正确,您可以在一个事务中执行多个查询。这其实就是使用事务的意义所在。

In PDO, from the documentation ,只要您通过调用 PDO::beginTransaction() 开始事务,您就可以执行多个查询,并且在您完成之前其他任何人都看不到更改(即通过调用 >PDO::commit()).

You're not limited to making updates in a transaction; you can also issue complex queries to extract data, and possibly use that information to build up more updates and queries; while the transaction is active, you are guaranteed that no one else can make changes while you are in the middle of your work. For further reading on transactions, refer to the documentation provided by your database server.

在 MySQL 中使用 InnoDB 引擎,具体而言,您具有行级粒度,这意味着只有行被锁定,而不是像(旧的)MyISAM 引擎中那样锁定整个表。

关于php - 单个 InnoDB 表上的多个事务可能吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39452236/

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