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 番目のトランザクションが失敗したことです。
なぜこれが起こっているのか教えてください..