手机网站app,wordpress安全插件对比,主机一键wordpress,滕州住房和城乡建设局网站隔离性简介
隔离性主要是指数据库系统提供一定的隔离机制,意思就是多个事务并发执行时#xff0c;一个事务的执行不应影响其它事务的执行。
数据库中并发一致性问题#xff1f;
在并发环境下#xff0c;事务的隔离性很难保证#xff0c;因此会出现很多并发一致性问题。 …隔离性简介
隔离性主要是指数据库系统提供一定的隔离机制,意思就是多个事务并发执行时一个事务的执行不应影响其它事务的执行。
数据库中并发一致性问题
在并发环境下事务的隔离性很难保证因此会出现很多并发一致性问题。
Read uncommitted
未提交读这种情况下一个事务A可以看到另一个事务B未提交的数据如果此时事务B发生回滚那么事务A拿到的就是脏数据这也就是脏读的含义。此隔离级别在MySQL InnoDB一般不会使用不做过多说明。
Read Committed
提交读一个事务从开始直到提交之前所做的任何修改对其他事务都是不可见的。解决了脏读问题但是存在幻读现象。
幻读
指的是在同一事务下连续执行两次同样的SQL语句可能导致不同的结果第二次的SQL语句可能会返回之前不存在的行也就是幻行。
事务的隔离等级
在SQL标准中定义了4种隔离级别分别是
Read uncommitted: 未提交读事务中的修改即使没有提交对其他事务也是可见的。存在脏读Read committed: 提交读大多数数据库系统的默认隔离级别(MySQL不是), 一个事务从开始到提交之前所做的修改对其他事务不可见。解决脏读存在幻读和不可重复读repeatable read: 可重复读该级别保证在同一事务中多次读取同样记录的结果是一致的。解决脏读和不可重复读理论上存在幻读但是在InnoDB引擎中解决了幻读Serializable可串行化强制事务串行执行。
上面4种隔离级别是SQL标准定义的但是在不同的存储引擎中实现的隔离级别不尽相同。本文主要介绍MySQL InnoDB 存储引擎中的隔离级别在InnoDB存储引擎中Repeatable Read 是默认的事务隔离级别同时该引擎的实现基于多版本的并发控制协议——MVCC (Multi-Version Concurrency Control)解决了幻读问题当然 脏读和不可重复读也是不存在的。MVCC最大的好处就在于读不加锁读写不冲突这样极大的增加了系统的并发性能
MySQL InnoDB 引擎的默认隔离级别虽然是「可重复读」但是它很大程度上避免幻读现象并不是完全解决了解决的方案有两种
针对快照读普通 select 语句是通过 MVCC 方式解决了幻读因为可重复读隔离级别下事务执行过程中看到的数据一直跟这个事务启动时看到的数据是一致的即使中途有其他事务插入了一条数据是查询不出来这条数据的所以就很好了避免幻读问题。 针对当前读select … for update 等语句是通过 next-key lock记录锁间隙锁方式解决了幻读因为当执行 select … for update 语句的时候会加上 next-key lock如果有其他事务在 next-key lock 锁范围内插入了一条记录那么这个插入语句就会被阻塞无法成功插入所以就很好了避免幻读问题。 这两个解决方案是很大程度上解决了幻读现象但是还是有个别的情况造成的幻读现象是无法解决的。
MySQL 可重复读隔离级别解决幻读了吗
浅析MySQL InnoDB的隔离级别