簡體   English   中英

一個人可以在一個MySQL事務中將一個查詢的結果用於另一個查詢嗎?

[英]Can one use the result of one query into another query within a single MySQL transaction?

我正在使用PHP PDO和MySQL進行編碼。

在這種情況下,我可以編寫單個事務來運行第一個查詢(或一系列查詢),然后將該查詢的結果用作另一個查詢的輸入嗎?

例如,我想(1)在表A中創建一個新記錄並獲取自動遞增的ID,(2)在表B中創建一個新記錄並獲取自動遞增的ID,(3)輸入生成的ID以上來自表A和B的表C的兩個字段中,該字段表示A和B之間的關系。

我可以單筆交易完成以上操作嗎? 另外,我可以在每個查詢之間添加一些編程嗎?

簡短的回答: 是的

長答案:

絕對是設計交易的目的。

只要您的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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM