ホームページ >データベース >mysql チュートリアル >MySQL ロック、トランザクション分離レベル、アプリケーションの関係
MySQL ロックのトランザクション分離レベルとアプリケーション
データベースでは、トランザクション分離レベルは非常に重要な概念であり、同時トランザクション間の分離の程度を決定します。 MySQL は、READ UNCOMMITTED、READ COMMITTED、REPEATABLE READ、SERIALIZABLE の 4 つのトランザクション分離レベルを提供します。トランザクション分離レベルが異なれば、データの読み取りと書き込みに対するロック戦略も異なるため、アプリケーションで適切なトランザクション分離レベルを正しく選択して使用することが重要です。
以下では、特定のコード例を使用して、さまざまなトランザクション分離レベルでのロック戦略を示します。
最初にテスト テーブルを作成します。
CREATE TABLE test_table ( id INT PRIMARY KEY, name VARCHAR(100), age INT );
次に、さまざまなトランザクションをそれぞれ示します。分離レベルでのロック戦略:
READ UNCOMMITTED:
-- 执行事务1 SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED; START TRANSACTION; SELECT * FROM test_table WHERE id = 1; -- 执行事务2 START TRANSACTION; UPDATE test_table SET age = 20 WHERE id = 1; COMMIT; -- 继续执行事务1 SELECT * FROM test_table WHERE id = 1; COMMIT;
この例では、トランザクション 1 は、トランザクション 2 によって変更されたがコミットされていないデータを読み取ります。
READ COMMITTED:
-- 执行事务1 SET TRANSACTION ISOLATION LEVEL READ COMMITTED; START TRANSACTION; SELECT * FROM test_table WHERE id = 1; -- 执行事务2 START TRANSACTION; UPDATE test_table SET age = 20 WHERE id = 1; COMMIT; -- 继续执行事务1 SELECT * FROM test_table WHERE id = 1; COMMIT;
この例では、トランザクション 1 はトランザクション 2 が送信したデータのみを読み取ることができます。
REPEATABLE READ:
-- 执行事务1 SET TRANSACTION ISOLATION LEVEL REPEATABLE READ; START TRANSACTION; SELECT * FROM test_table WHERE id = 1; -- 执行事务2 START TRANSACTION; UPDATE test_table SET age = 20 WHERE id = 1; COMMIT; -- 继续执行事务1 SELECT * FROM test_table WHERE id = 1; COMMIT;
この例では、トランザクション 1 はデータの読み取り時に共有ロックを追加し、トランザクション 2 はトランザクション 1 がその前に共有ロックを解放するのを待ちます。実行できます。
SERIALIZABLE:
-- 执行事务1 SET TRANSACTION ISOLATION LEVEL SERIALIZABLE; START TRANSACTION; SELECT * FROM test_table WHERE id = 1; -- 执行事务2 START TRANSACTION; UPDATE test_table SET age = 20 WHERE id = 1; COMMIT; -- 继续执行事务1 SELECT * FROM test_table WHERE id = 1; COMMIT;
この例では、トランザクション 1 はデータの読み取り時に共有ロックを追加し、トランザクション 2 はトランザクション 1 が共有ロックを解放するまで待機します。処刑される。
上記のコード例を通じて、さまざまなトランザクション分離レベルでロック戦略がどのように機能するかを確認できます。実際のアプリケーション開発では、適切なトランザクション分離レベルを選択することが非常に重要であり、特定のビジネス シナリオやパフォーマンス要件に応じて選択できます。
以上がMySQL ロック、トランザクション分離レベル、アプリケーションの関係の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。