十年网站开发经验 + 多家企业客户 + 靠谱的建站团队
量身定制 + 运营维护+专业推广+无忧售后,网站问题一站解决
这篇文章主要介绍“MySQL的隔离级别是什么”,在日常操作中,相信很多人在mysql的隔离级别是什么问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”mysql的隔离级别是什么”的疑惑有所帮助!接下来,请跟着小编一起来学习吧!
创新互联是一家专注于网站建设、网站设计与策划设计,吉林网站建设哪家好?创新互联做网站,专注于网站建设10余年,网设计领域的专业建站公司;建站业务涵盖:吉林等地区。吉林做网站价格咨询:18980820575
READ UNCOMMITTED
SELECT语句以非锁定方式被执行,但是一个可能更早期版本的记录会被用到。因此,使用这个隔离级别,比如,读是不连贯的。这也被称为“脏读”( dirty read)。另外,这个隔离级别象READ COMMITTED一样作用;简而言之,在READ UNCOMMITTED的隔离级别下,开启事物但事物并未提交之前,对于其他的事物都是可见的,记住,从性能的角度上来说,这个级别不见得比其他隔离级别的好;一般情况下非常少用,除非特殊业务需求;
READ COMMITTED
一个有些象Oracle的隔离级别。所有SELECT ... FOR UPDATE和SELECT ... LOCK IN SHARE MOD语句仅锁定索引记录,而不锁定记录前的间隙,因而允许随意紧挨着已锁定的记录插入新记录。 UPDATE和DELETE语句使用一个带唯一搜索条件的唯一的索引仅锁定找到的索引记录,而不包括记录前的间隙。在范围类型UPDATE和DELETE语句, InnoDB必须对范围覆盖的间隙设置next-key锁定或间隙锁定以及其它用户做的块插入。这是很必要的,因为要让MySQL复制和恢复起作用, “幽灵行”必须被阻止掉;简而言之,READ COMMITTED其实是解决了READ UNCOMMITTED的可重复读问题,即READ COMMITTED的隔离级别下,一个事物的开启到结束,它的所做的修改更新删除 对于其他事物而言都是不可见的;
REPEATABLE READ
这是InnoDB的默认隔离级别。带唯一搜索条件使用唯一索引的SELECT ... FOR UPDATE, SELECT ... LOCK INSHARE MODE, UPDATE 和DELETE语句只锁定找到的索引记录,而不锁定记录前的间隙。用其它搜索条件,这些操作采用next-key锁定,用next-key锁定或者间隙锁定锁住搜索的索引范围,并且阻止其它用户的新插入。在持续读中,有一个与之前隔离级别重要的差别:在这个级别,在同一事务内所有持续读读取由第一次读所确定的同一快照。这个惯例意味着如果你在同一事务内发出数个无格式SELECT语句,这些SELECT语句对相互之间也是持续的;REPEATABLE READ解决了恶心的脏读情况,保证同一个事务在读取同样的记录的时候能够保证结果一致性;但是却没能解决幻读的问题,就是当一个事务在读取一个记录的同时,另外一个事物又在对这个记录进行插入操作,导致事物再次读取的时候产生换行
SERIALIZABLE
这个级别类似REPEATABLE READ,但是所有无格式SELECT语句被 隐式转换成SELECT ... LOCK IN SHAREMODE。最高隔离级别,强制事务串行执行,可以说在对每个行数据加行锁,所以会导致很多锁的争用或者大量超时问题,性能很差,如果不是特殊的业务需求,一般不会选择这种情况;
附个图片(来自于高性能mysql):
到此,关于“mysql的隔离级别是什么”的学习就结束了,希望能够解决大家的疑惑。理论与实践的搭配能更好的帮助大家学习,快去试试吧!若想继续学习更多相关知识,请继续关注创新互联网站,小编会继续努力为大家带来更多实用的文章!