【问题标题】:Can one use the result of one query into another query within a single MySQL transaction?可以在单个 MySQL 事务中将一个查询的结果用于另一个查询吗?
【发布时间】:2012-08-30 15:09:18
【问题描述】:

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

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

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

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

【问题讨论】:

    标签: php mysql transactions pdo


    【解决方案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));
    } 
    

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-04-06
      • 2011-02-17
      • 2014-08-18
      • 2016-12-31
      相关资源
      最近更新 更多