Niveau d'isolement des transactions de verrouillage MySQL et application
Dans la base de données, le niveau d'isolement des transactions est un concept très important, qui détermine le degré d'isolement entre les transactions simultanées. MySQL propose quatre niveaux d'isolation des transactions : READ UNCOMMITTED, READ COMMITTED, REPEATABLE READ et SERIALIZABLE. Différents niveaux d'isolation des transactions ont différentes stratégies de verrouillage pour la lecture et l'écriture des données. Il est donc crucial de sélectionner et d'utiliser correctement le niveau d'isolation des transactions approprié dans votre application.
Ce qui suit utilise des exemples de code spécifiques pour démontrer les stratégies de verrouillage sous différents niveaux d'isolement des transactions :
Créez d'abord une table de test :
CREATE TABLE test_table ( id INT PRIMARY KEY, name VARCHAR(100), age INT );
Ensuite, nous démontrons les stratégies de verrouillage sous différents niveaux d'isolement des transactions :
LIRE 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;
Dans cet exemple, la transaction 1 lit les données modifiées mais non validées par la transaction 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;
Dans cet exemple, la transaction 1 ne peut lire que les données soumises par la transaction 2.
LECTURE RÉPÉTABLE :
-- 执行事务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;
Dans cet exemple, la transaction 1 ajoute un verrou partagé lors de la lecture des données, et la transaction 2 attend que la transaction 1 libère le verrou partagé avant de pouvoir être exécutée.
SÉRIALISABLE :
-- 执行事务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;
Dans cet exemple, la transaction 1 ajoute un verrou partagé lors de la lecture des données, et la transaction 2 attend que la transaction 1 libère le verrou partagé avant de pouvoir être exécutée.
Grâce aux exemples de code ci-dessus, nous pouvons voir comment les stratégies de verrouillage fonctionnent sous différents niveaux d'isolement des transactions. Dans le développement réel d'applications, il est indispensable de choisir le niveau d'isolation des transactions approprié, qui peut être sélectionné en fonction de scénarios commerciaux spécifiques et d'exigences de performances.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!