1

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

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

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

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

4

1 回答 1

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

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

于 2012-09-05T20:48:02.430 回答