设有两个事务T1和T2,其并发操作序列如下所示,下列说法中正确的是:( )
步骤:T1 T2
1 读A=100
2 A=200写回
3 读A=200
4 A=300写回
A.该操作序列不存在问题
B.该操作序列丢失修改
C.该操作序列不能重复读
D.该操作序列读出“脏”数据
D
这个操作显然存在问题,故A不能成立
这里的修改只涉及了T2事务中的两个写回操作,T2是一个独立的事务,因些其事务本身是存在原子性的,不能丢失修改,A=200也同时会发生正确的写回,显然不存在丢失修改.故B不能成立
C至于读取方法,可以随便的读取的,显然可以重复读的.
D,可以看出整个事务完成后,你不知道T1事务的数据是来源于何处,当然,他出现的”脏读”.所以D是正确的.
事务上一般为保证其原子性,发生T2时读A时并不能数据进行锁定,而是在写入时一定要发生锁定的,且是一个读写锁定,不能再允许其他事务读数据以防发生脏读.这就是T2事务没有设置A数据的读写锁定而致的.
所以,如果T1事务有写回操作时,就该将A数据进行一次读写锁定,而T2也是一样的.如:
T2在A=200写回前进行一定读写锁定,至到A=300后进行一次读写开放,则这个T1与T2序列就不会这样发生的,它只可能在T2的A=100前后进行读取,或者在A=300写回后进行读取,这样从原子性上来说,T1就好像是在T2事务发生前或后进行的读写,而从程序序列上来说,T1的读取却可能发生在T2的A=100读取之后进行读取,完全两个事务是并发执行的!这就是事务的各种特性!
一、 数据库的隔离级别:并发性作用。
1、 Read Uncommited(未提交读):没有提交就可以读取到数据(发出了Insert,但没有commit就可以读取到。)很少用
2、 Read Commited(提交读):只有提交后才可以读,常用,
3、 Repeatable Read(可重复读):mysql默认级别, 必需提交才能见到,读取数据时数据被锁住。
4、 Serialiazble(序列化读):最高隔离级别,串型的,你操作完了,我才可以操作,并发性特别不好,
隔离级别 是否存在脏读 是否存在不可重复读 是否存在幻读
Read Uncommitted(未提交读) Y Y Y
Read Commited(提交读) N Y(可采用悲观锁解决) Y
Repeatable Read(可重复读) N N Y
Serialiazble(序列化读)
脏读:没有提交就可以读取到数据称为脏读
不可重复读:再重复读一次,数据与你上的不一样。称不可重复读。
幻读:在查询某一条件的数据,开始查询的后,别人又加入或删除些数据,再读取时与原来的数据不一样了。
1、 Mysql查看数据库隔离级别:
方法:select @@tx_isolation;
2、 Mysql数据库修改隔离级别:
方法:set transaction isolation level 隔离级别名称;
例如:修改为未提交读:set transaction isolation level read uncommitted;
事务概念(ACID)
ACID即:事务的原子性、一致性、独立性及持久性
事务的原子性:是指一个事务要么全部执行,要么不执行.也就是说一个事务不可能只执行了一半就停止了.比如你从取款机取钱,这个事务可以分成两个步骤:1划卡,2出钱.不可能划了卡,而钱却没出来.这两步必须同时完成.要么就不完成.
事务的一致性:是指事务的运行并不改变数据库中数据的一致性.例如,完整性约束了a+b=10,一个事务改变了a,那么b也应该随之改变.
事务的独立性:是指两个以上的事务不会出现交错执行的状态.因为这样可能会导致数据不一致.
事务的持久性:是指事务运行成功以后,就系统的更新是永久的.不会无缘无故的回滚.
事务并发时可能出现问题
1、第一类丢失更新(Lost Update)
悲观锁、乐观锁
Hibernate谈到悲观锁、乐观锁,就要谈到数据库的并发问题,数据库的隔离级别越高它的并发性就越差
并发性:当前系统进行了序列化后,当前读取数据后,别人查询不了,看不了。称为并发性不好
数据库隔离级别:见前面章级
一、 悲观锁
悲观锁:具有排他性(我锁住当前数据后,别人看到不此数据)
悲观锁一般由数据机制来做到的。
1、 悲观锁的实现
通常依赖于数据库机制,在整修过程中将数据锁定,其它任何用户都不能读取或修改(如:必需我修改完之后,别人才可以修改)
2、 悲观锁的适用场景:
悲观锁一般适合短事务比较多(如某一数据取出后加1,立即释放)
长事务占有时间(如果占有1个小时,那么这个1小时别人就不可以使用这些数据),不常用。
你查看Hibernate的文档就知
这个不是有Hibernate来处理的,Hibernate只是负责和数据库的映射关系,真正处理并发还得由你程序上来控制 等待专业的人回答
用户登录
还没有账号?立即注册
用户注册
投稿取消
文章分类: |
|
还能输入300字
上传中....