2012-09-05 57 views
1

我使用PHP PDO和MySQL編碼。可以在單個MySQL事務中將一個查詢的結果用於另一個查詢嗎?

在這種情況下,我可以編寫一個可以運行第一個查詢(或一系列查詢)的單個事務,然後將此查詢的結果用作另一個查詢的輸入嗎?例如,我想(1)在表A中創建一個新記錄並獲取自動增加的ID作爲回報,(2)在表B中創建一個新記錄並獲取自動增加的ID作爲回報,(3)在代表A和B之間的關係的表C的兩個字段中輸入上面從表A和B生成的ID。

我可以在單個交易中執行上述操作嗎?另外,我可以在每個查詢之間添加一些編程嗎?

回答

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

注意,您可以ASLO巢交易和InnoDB表使用SAVEPOINT

相關問題