1

'LOCK TABLES'クエリの代わりにこの関数を使用できますか?

例:

pdo::beginTransaction(); 

    SELECT id AS last_id FROM t WHERE...
    INSERT INTO t (id,...) VALUES (last_id+1,....)

pdo::commit();
4

1 に答える 1

4

これに対する答えは次のとおりです。何が行われ、何が行われず、どのように機能するかを正確に理解するのに役立つ最も重要なリソースは、こちらです。

キックオフについては、基礎となるドライバー (MySQL、MSSQL など) がトランザクション機能をサポートしているかどうかによって異なります。ドライバーがトランザクションをサポートしていない場合、pdo::beginTransaction();は失敗して を返しFALSE、すべてのクエリがすぐに実行されます。これは、クエリが失敗すると言っているわけではありませんLOCK TABLES。基礎となるデータベース エンジンがそれをサポートしているかどうかによって異なります。

実際、少なくとも MySQL では、ステートメントpdo::beginTransaction()と同じ規則に従います。テーブルをすぐにロックするのではなく、トランザクションの一部であるクエリがACIDSTART TRANSACTIONの規則に従っていることを確認するだけです。

リンク先のドキュメントで詳細に説明されているため、どの組み合わせが機能し、何を行うかについての詳細には触れません。

于 2012-05-27T12:51:49.257 に答える