MySQL事务(三)

一、事务(Innodb锁)的隔离级别概述

并发事务带来的问题:

        更新丢失(lost update):当两个或多个事务选择同一行,然后基于最初选定的值更新该行时,由于每个事务都不知道其他事务的存在,就会发生丢失更新问题——最后的更新覆盖了由其他事务所做的更新;

        脏读(dirty reads):一个事务正在对一条记录做修改,在这个事务完成并提交前,这条记录的数据就处于不一致状态;这时,另一个事务也来读取同一条记录,如果不加控制,第二个事务读取了这些“脏”数据,并据此做进一步的处理,会产生未提交的数据依赖关系。

        不可重复读(non-repeatable reads):一个事务在读取某些数据后的某个时间,再次读取以前读过的数据,却发现其读出的数据已经发生了改变或某些记录已经被删除

        幻读(phantom reads):一个事务按相同的查询条件重新读取以前检索过的数据,却发现其他事务插入了满足其查询条件的数据

  “更新丢失”通常是应该完全避免的。但防止更新丢失,并不能单靠数据库事务控制器来解决,需要应用程序对要更新的数据加必要的来解决。

   脏读,不可重复读,幻读其实都是数据库读一致性问题,必须由数据库提供一定的事务隔离机制来解决、

  

  平衡“隔离”与“并发”的矛盾。

        未提交读,读数据一致性——最低界别,只能保证不读取物理上损坏的数据。

        已提交读,读数据一致性——语句级

        可重复读,读数据一致性——事务级

        可序列化,读数据一致性——最高级别,事务级

  

二、数据库实现事务隔离的方式:

        1.在读取数据前,对其加锁,阻止其他事物对数据进行修改

        2.不加任何锁,通过一定机制生成一个数据请求时间点的一致性数据快照,并用这个快照来供一定级别(语句级或事务级)的一致性读取,从用户的角度来看,好像是数据库可以提供同一数据库的多个版本,叫做数据多版本并发控制(MVCCMCC),常称为多版本数据库

 

三、画图说明事务的隔离级别的概念和基本使用

 

可串行化的隔离级别最高,如图

 

四、如何设置事务的隔离级别

基本语法是:

mysql>set  session  transaction  isolation  level  隔离级别名称;

mysql默认的隔离级别

五、事务的四个特性(acid)

 推荐博文:https://juejin.im/post/5caaaa67e51d452b63241954

原文地址:https://www.cnblogs.com/cshaptx4869/p/10478076.html