1

PHPPDOとMySQLを使用してコーディングしています。

そのコンテキストで、最初のクエリ(または一連のクエリ)を実行する単一のトランザクションを記述し、このクエリの結果を別のクエリへの入力として使用できますか?

たとえば、(1)テーブルAに新しいレコードを作成して自動インクリメントIDを取得し、(2)テーブルBに新しいレコードを作成して自動インクリメントIDを取得し、(3)生成されたIDを入力します。上記のAとBの関係を表すテーブルCの2つのフィールドのテーブルAとBから。

上記を1回の取引で行うことはできますか?また、各クエリの間にプログラミングを追加できますか?

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 に答える