数据库事务隔离性

数据库的四大隔离性

  1. 读未提交
  2. 读已提交
  3. 可重复读
  4. 串行化

这里主要介绍读已提交、读已提交含义就是、不会产生脏读、但是会产生可重复读、例子如下、通过下图解释可得知读已提交是避免不了可重复数据滴、原因:线程6在同一事务下、两次查询不一致、如果线程6中第一次查询后包含业务逻辑、那么在这种情况下、就会引发一定的业务问题
数据库事务隔离性_第1张图片
说一下锁的问题、很明显上面第二次查询被阻塞、那么阻塞特的肯定是锁、updatedelete都会产生锁、特别是在事务中、如果该事务不提交、那么就会阻塞接下来的相关执行语句、可以参考如下update阻塞问题
数据库事务隔离性_第2张图片
线程56基本同时执行、然后俩线程执行查询、这时候无任何锁、然而当5对数据进行了修改、这个时候6再次进行修改的时候、因为5的事务还未提交、6就产生了阻塞、一直等到线程5事务提交后、线程6的修改语句才执行完毕

我这里用的是SqlServer 经过一遍遍测试发现我修改A数据后未提交事务、如果这个时候我在另外事务中修改B的时候会被阻塞、但是如果是查询B则不会被阻塞、数据库也分为很多种、具体锁的机制可以参考一下Mysql锁机制 分析的相当全面

以我的理解来说、事务隔离性主要会对读造成影响、主要有脏读 不可重复读 幻读、但是也可能会带来更新丢失、参考投票业务、如果你是先查询、程序累加票数、再修改、那么无论该业务需不需要加事务、当并发一定大的时候都会带来更新丢失问题、这个可以参考一下乐观锁的实现方式

在针对某些业务编写代码时、不单单要考虑事务隔离性还要考虑所使用数据库的锁机制 只有全面的分析后才能得到最优的解决方案

你可能感兴趣的:(数据库,数据库,事务,锁)