[Questions d'entretien] Savez-vous quels sont les niveaux d'isolement dans MySQL ?

Parfois, le contenu du blog peut changer. Le premier blog est le dernier. Les autres adresses de blog peuvent ne pas être synchronisées. Veuillez le vérifier attentivement.https://blog.zysicyj.top

Première adresse du blog

Adresse de l'article de la série


Dirty Read fait référence à une transaction lisant les données d'une autre transaction non validée. Supposons que la transaction A modifie certaines données mais ne les ait pas encore soumises. La transaction B lit ces données non validées, puis la transaction A est annulée, ce qui rend les données lues par la transaction B invalides ou incohérentes. Des lectures incorrectes peuvent entraîner une incohérence des données.

Phantom Read signifie qu'une transaction insère de nouvelles données entre deux requêtes, ce qui rend les résultats des deux requêtes de la première transaction incohérents. Supposons que lorsque la transaction A interroge des données dans une certaine plage, la transaction B insère une nouvelle donnée qui correspond à la plage. Puis, lorsque la transaction A interroge à nouveau, elle découvre qu'il y a une donnée supplémentaire, comme une illusion. Les lectures fantômes peuvent entraîner des incohérences dans les résultats des requêtes.

La lecture non répétable signifie que lorsqu'une transaction lit les mêmes données plusieurs fois, les données lues sont incohérentes en raison des modifications apportées par d'autres transactions. Supposons qu'après que la transaction A ait lu certaines données, la transaction B modifie les données et les valide. Puis, lorsque la transaction A lit à nouveau les données, elle constate que les données ont changé. Les lectures non répétables peuvent entraîner des incohérences dans les données lues.

MySQL résout les problèmes de lectures sales, de lectures fantômes et de lectures non répétables en définissant des niveaux d'isolement. Les niveaux d'isolement définissent la visibilité et l'impact d'une transaction sur d'autres transactions.

MySQL propose quatre niveaux d'isolation :

  1. "Lecture non validée" : le niveau le plus bas, les transactions peuvent lire les données non validées d'autres transactions, ce qui peut entraîner des lectures incorrectes, des lectures fantômes et des problèmes de lecture non répétables.

  2. "Lecture validée" : une transaction ne peut lire que les données qui ont été soumises par d'autres transactions, ce qui peut éviter des problèmes de lecture incorrecte, mais des lectures fantômes et des problèmes de lecture non reproductibles peuvent toujours survenir.

  3. "Lecture répétable" : Lorsqu'une transaction lit les mêmes données plusieurs fois dans la même requête, elle garantit la cohérence des données lues et évite le problème de lecture non répétable. Toutefois, des problèmes de lecture fantôme peuvent toujours survenir.

  4. 「串行化(Serializable)」:最高级别,事务按顺序执行,避免了脏读、幻读和不可重复读问题。但会导致并发性能下降,因为事务需要串行执行。

通过设置合适的隔离级别,可以根据具体的业务需求来解决脏读、幻读和不可重复读问题。在MySQL中,可以使用以下语句设置隔离级别:

SET TRANSACTION ISOLATION LEVEL <隔离级别>;

其中,<隔离级别>可以是READ UNCOMMITTEDREAD COMMITTEDREPEATABLE READSERIALIZABLE

如果您喜欢我的内容,请点击关注

扫码长按关注交流群获取最新消息,免费的面试题手册即将在交流群内推出

alt

公众号

alt

个人微信

alt

本文由 mdnice 多平台发布

Guess you like

Origin blog.csdn.net/njpkhuan/article/details/132843582