1

MySql でトランザクションをテストしています。2 つのテーブルを作成しました。

CREATE TABLE `testtransaction1` (
  `a` bigint(20) DEFAULT NULL,
  `b` bigint(20) DEFAULT NULL
) ENGINE=InnoDB;


CREATE TABLE `testtransaction2` (
  `a` bigint(20) DEFAULT NULL,
  `b` bigint(20) DEFAULT NULL
) ENGINE=InnoDB;

その後、スクリプトを実行しています:

$conn->StartTrans ();
try {
    $conn->Execute("insert into testtransaction1(a) values (1),(2)");


    sleep(5);

    $conn->Execute("insert into testtransaction2 select * from testtransaction1 where b is null");

    $conn->Execute("update testtransaction1 set b=100 where b is null");
    echo "Ran insert into testtransaction2 select * from testtransaction1 where b is null";
    $out=$conn->CompleteTrans ($autoComplete=true);

    var_dump($out);
} catch ( Exception $e ) {
}

だから、私がやっていることは、数秒のギャップ内に同じスクリプトを2回実行することです。トランザクションがテーブルをロックするかどうかをテストします。

私が見ているのは、最初のトランザクションのみが完了し、2 番目のトランザクションが失敗したことです。

なぜこれが起こっているのか教えてください..

4

0 に答える 0