参考:http://comedsh.iteye.com/blog/698733并发操作数据库,遇到的问题1、丢失更新如果两个事务都要更新数据库一个字段X,x=100事务A事务B读取X=100读取X=100写入x=X+100写入x=X+200事务结束x=200事务结束x=300最后x=300两个不同事...
分类:
数据库 时间:
2015-05-09 18:49:34
阅读次数:
133
最近在项目中进行压力测试遇到了数据库的死锁问题,简言之,如下的代码在 SERIALIZABLE 隔离级别造成了死锁:1234567891011121314SELECT@findCount=COUNT(id) FROMMyTableWHERE[fk_related_id]=@ArgumentIF (@...
分类:
数据库 时间:
2015-05-08 17:57:29
阅读次数:
232
在上一篇中忘记了一个细节。Range T-K 到底代表了什么?Range T-K Lock 代表了在 SERIALIZABLE 隔离级别中,为了保护范围内的数据不被并发的事务影响而使用的一类锁模式(避免幻读)。它由两个部分构成:第一个部分代表了他锁定了一个索引范围,在这个范围内,所有索引使用 T 锁...
分类:
数据库 时间:
2015-05-08 17:49:06
阅读次数:
158
一:MySQL锁二:MySQL事务三:MySQL隔离级别1.1为什么要有锁?因为数据库要解决并发控制问题。在同一时刻,可能会有多个客户端对某张表的某条数据或某些数据进行操作,比如有的在读取该行数据,其他的尝试去删除它。为了保证数据的一致性,数据库就要对这种并发操作进行控制,..
分类:
数据库 时间:
2015-05-01 20:05:55
阅读次数:
189
Spring事务以前的事务都是编程式事务,需要开启和关闭,然后程序写在这里面spring,声明式事务Spring事务隔离级别DEFAULT 使用数据库默认隔离级别 READ_UNCOMMITTED 允许读取尚未提交的数据。可能导致脏读、幻读或不可重复读。 READ_COMMITTE...
分类:
编程语言 时间:
2015-04-29 13:10:14
阅读次数:
135
脏读不可重复读幻读可序列化(符合事务的四个特性的正常情况 )解释: 脏读:事务A对数据1做了更新,但是还没有来得及提交 此时事务B对数据1进行了查询获得了事务A更新后的数据, 但是事务A因为一些原因又进行了回滚,这就导致数据1回到了 最初状态,那事务B读取的数据就是错误的,这就是脏...
分类:
Web程序 时间:
2015-04-28 17:53:50
阅读次数:
167
事务 作用:用来执行一连串的动作,并且保证所有动作要么都执行、要么都不执行。 属性:原子行、一致性、隔离性、持久性锁 作用:SqlServer使用锁来实施事务隔离属性。阻塞 定义:如果一个事务持有一数据资源的锁,而另一事务请求相同资源的不兼容的锁,则新锁的请求将被阻塞。 默认情况下,...
分类:
数据库 时间:
2015-04-26 13:45:36
阅读次数:
135
InnoDB存储引擎MVCC的实现策略:
在每一行数据中额外保存两个隐藏的列:当前行创建时的版本号和删除时的版本号(可能为空)。这里的版本号并不是实际的时间值,而是系统版本号。每开始 个新的事务,系统版本号都会自动递增。事务开始时刻的系统版本号会作为事务的版本号,用来和查询每行记录的版本号进行比较。
每个事务又有自己的版本号,这样事务内执行CRUD操作时,就通过版本号的比较来达到数据版本控制的目的。...
分类:
数据库 时间:
2015-04-26 00:05:53
阅读次数:
186
为什么需要锁?因为数据库要解决并发控制问题。在同一时刻,可能会有多个客户端对Table1.rown进行操作,比如有的在读取该行数据,其他的尝试去删除它。为了保证数据的一致性,数据库就要对这种并发操作进行控制,因此就有了锁的概念。锁的分类从对数据操作的类型(读\写)分读锁(共享锁):针对同一块数据,多个读操作可以同时进行而不会互相影响。写锁(排他锁):当当前写操作没有完成前,它会阻断其他写锁和读锁。...
分类:
数据库 时间:
2015-04-25 22:49:14
阅读次数:
333
当多个并发的事务同时访问持久化层的缓存中的相同数据时,会引起并发问题,必须采用必要的事务隔离措施。 在进程范围或集群范围的缓存,即第二级缓存,会出现并发问题。因此可以设定以下4种类型的并发访问策略,每一种策略对应一种事务隔离级别。 Hibernate二级缓存的并发访问策略有四种:只读(read-o....
分类:
Web程序 时间:
2015-04-19 22:33:42
阅读次数:
153