本篇内容介绍了“MySQL中的事务隔离是什么意思”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!
事务就是要保证一组数据库操作,要么全部成功,要么全部失败。在MySQL中,事务支持是在引擎层实现的,但并不是所有的引擎都支持事务。比如MySQL原生的MyISAM引擎就不支持事务。
一、事务的特性
原子性:一个事务中的所有操作,要么全部完成,要么全部不完成,不会结束在中间某个环节。事务在执行过程中发生错误,会被回滚到事务开始前的状态,就像这个事务从来没有执行过一样
一致性:在事务开始之前和事务结束以后,数据库的完整性没有被破坏
隔离性:数据库允许多个并发事务同时对数据进行读写和修改的能力,隔离性可以防止多个事务并发执行时由于交叉执行而导致数据的不一致
持久性:事务处理结束后,对数据的修改就是永久的,即便系统故障也不会丢失
二、隔离级别
1.当数据库上有多个事务同时执行的时候,就可能出现脏读、不可重复读、幻读的问题
脏读:B事务读取到了A事务尚未提交的数据
不可重复读:一个事务读取到了另一个事务中提交的update的数据
幻读/虚读:一个事务读取到了另一个事务中提交的insert的数据
2.事务的隔离级别包括:读未提交、读提交、可重复读和串行化
create table T(c int) engine=InnoDB;
insert into T(c) values(1);
下面是按照时间顺序执行两个事务的行为:
若隔离级别是读未提交,则V1是2。这时候事务B虽然还没提交,但是结果已经被A看到了。V2、V3都是2
若隔离级别是读提交,则V1是1,V2是2。事务B的更新在提交后才能被A看到。V3也是2
若隔离级别是可重复读,则V1、V2是1,V3是2。之所以V2是1,遵循的是事务在执行期间看到的数据前后必须是一致的
若隔离级别是串行化,V1、V2值是1,V3是2
在实现上,数据库里面会创建一个视图,访问的时候以视图的逻辑结果为准。在可重复读隔离级别下,这个视图是在事务启动时创建的,整个事务存在期间都用这个视图。在读提交隔离级别下,这个视图是在每个SQL语句开始执行的时候创建的。读未提交隔离级别下直接返回记录上的最新值,没有视图概念;而串行化隔离级别下直接用加锁的方式来避免并行访问。
大型站长资讯类网站! https://www.0818zz.com