易托管建站工具,高密做网站哪家强代理,网站策划 要求,网络营销观念案例之前我们给大家讲了数据库中多个事务并发时可能产生的几种问题#xff0c;包括了脏写、脏读、不可重复读、幻读#xff0c;几种问题
那么针对这些多事务并发的问题#xff0c;实际上SQL标准中就规定了事务的几种隔离级别#xff0c;用来解决这些问题。
注意一下#xff…之前我们给大家讲了数据库中多个事务并发时可能产生的几种问题包括了脏写、脏读、不可重复读、幻读几种问题
那么针对这些多事务并发的问题实际上SQL标准中就规定了事务的几种隔离级别用来解决这些问题。
注意一下我们今天讲的这个SQL标准的事务隔离级别并不是MySQL的事务隔离级别MySQL在具体实现事务隔离级别的时候会有点差别这个我们下一次再讲今天先关注SQL标准是如何规定事务隔离级别的。
在SQL标准中规定了4种事务隔离级别就是说多个事务并发运行的时候互相是如何隔离的从而避免一些事务并发问题
这4种级别包括了read uncommitted读未提交read committed读已提交repeatable read可重复读serializable串行化
不同的隔离级别是可以避免不同的事务并发问题的所以大家一定要对这个事务隔离级别有一个深刻的理解。
第一个read uncommitted隔离级别是不允许发生脏写的
也就是说不可能两个事务在没提交的情况下去更新同一行数据的值但是在这种隔离级别下可能发生脏读不可重复读幻读。
感觉如何是不是感觉这种隔离级别让你整个人都感觉不好了
说实在的一般来说是没有人做系统开发的时候傻到把事务隔离级别设置为读未提交这个级别的。
第二个是read committed隔离级别这个级别下不会发生脏写和脏读
也就是说人家事务没提交的情况下修改的值你是绝对读不到的但是呢可能会发生不可重复读和幻读问题因为一旦人家事务修改了值然后提交了你事务是会读到的所以可能你多次读到的值是不同的
这里教给大家一个稍微有点骚气的简写名词就是RC一般如果你在公司里做开发有个其他团队的兄弟讨论技术方案的时候跟你来了句把事务隔离级别设置成RC这个时候你不要目瞪口呆知道是读已提交级别就行了。
你只要记住这个级别在别的事务已经提交之后读到他们修改过的值就可以了但是别的事务没提交的时候绝对不会读到人家修改的值。
第三个是REPEATABLE READ隔离级别就是可重复读级别
这个级别下不会发生脏写、脏读和不可重复读的问题因为你一个事务多次查询一个数据的值哪怕别的事务修改了这个值还提交了没用你不会读到人家提交事务修改过的值你事务一旦开始多次查询一个值会一直读到同一个值
我们给大家一个图看看这个RR级别的效果以后记得这个骚气的简写词就是RR公司里有兄弟让你把事务设置成RR的时候你也不要一脸懵逼。
一个事务A第一次查询一行数据的值是值A如下图所示。 接着事务B修改了这行数据的值为值B还提交了如下图所示。 接着事务A再次查询这行数据的值读到的还是值A因为他在事务执行期间多次读一行数据绝对读到的都是一样的值他是允许可重复读的希望大家理解一下这个概念可重复读如下图。 这就是第三种隔离级别给一个骚气的名字RR级别记住了RR级别保证你不会读到人家已经提交的事务修改过的值但是他还是会发生幻读的
因为假设你一次SQL是根据条件查询比如“select * from table where id10”第一次查出来10条数据结果另外一个事务插入了一条数据下次你可能会查出来11条数据还是会有幻读问题的
RR隔离级别只不过保证对同一行数据的多次查询你不会读到不一样的值人家已提交事务修改了这行数据的值对你也没影响
最后一个隔离就别就是serializable级别这种级别根本就不允许你多个事务并发执行只能串行起来执行先执行事务A提交然后执行事务B提交接着执行事务C提交所以此时你根本不可能有幻读的问题因为事务压根儿都不并发执行
但是这种级别一般除非脑子坏了否则更不可能设置了因为多个事务串行那数据库很可能一秒并发就只有几十了性能会极差的。
好了今天就把SQL标准里的四种隔离级别讲完了大家一定要记住非常骚气的RC和RR级别因为平时比较常见的就是用RC和RR两种隔离级别。