可以在单个MySQL事务中将一个查询的结果用于另一个查询吗?

时间:2012-09-05 20:24:58

标签: php mysql transactions pdo

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

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

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

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

1 个答案:

答案 0 :(得分:1)

简短回答:

答案很长:

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

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

  

另外,我可以在每个查询之间添加一些编程吗?

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

示例:

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));
} 

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