php - 能否在单个 MySQL 事务中将一个查询的结果用于另一个查询?

标签 php mysql transactions pdo

我正在使用 PHP PDO 和 MySQL 进行编码。

在这种情况下,我能否编写一个事务来运行第一个查询(或一系列查询),然后将此查询的结果用作另一个查询的输入?

例如,我想 (1) 在表 A 中创建一条新记录并返回自动递增的 ID,(2) 在表 B 中创建一条新记录并返回自动递增的 ID,(3) 输入上面从表A和B生成的ID在表C的两个字段中,表示A和B之间的关系。

我可以在单笔交易中完成上述操作吗?另外,我可以在每个查询之间添加一些编程吗?

最佳答案

简短回答:

长答案:

当然,这就是交易的目的。

只要您的 SQL 供应商支持事务(mysql 在 InnoDB 表上支持),您就可以使用它们来执行一系列查询。

Also, can I add some programming between each queries?

是的,但是,如果您要更新某些第三方,您可以确保自己回滚更改。

例子:

try {
  $db->beginTransaction();
  $db->exec('INSERT INTO tableA (id, column) VALUES (NULL, NOW())');
  $db->exec('SELECT id FROM tableB ORDER BY id DESC LIMIT 1');
  // ...
  $httpClient->post(sprintf('/notify/foo/%d?value=ok', $id));
  $db->commit();
} catch (\PDOException $e) {
    $db->rollback();
    $httpClient->post(sprintf('/notify/foo/%d?value=cancel', $id));
} 

请注意,您也可以嵌套事务并在 InnoDB 表上使用 SAVEPOINT

关于php - 能否在单个 MySQL 事务中将一个查询的结果用于另一个查询?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12289206/

相关文章:

php - mysqld_safe mysqld 从 pid 文件 mysqld.pid 结束

php - Symfony - 在哪里放置多个/所有 Controller 的通用代码?

sql - 同一列可以对另一列有主键和外键约束吗

mysql - Drush Drupal 临时文件夹

php - 使用 Paypal 交易

php - 从 GET 请求中删除等号 "="

php - 如何使 Laravel 中的特定 session 无效(用户使用记住我功能)

mysql查询在一段时间不活动后超时-我认为是查询缓存问题

mysql - 为什么 MySQL 在搜索索引列时不锁定行

rest - GetTransactionDetails Paypal