事务隔离级别与锁

来源:互联网 发布:电脑版淘宝会员登录 编辑:程序博客网 时间:2024/06/06 04:20

隔离性需要处理三个问题:脏读、不可重复读、幻读。

脏读:一个事务对数据进行了增删改,但未提交,有可能回滚,但另一个事务读取了未提交的数据

不可重复读:一个事务对数据进行了更新或删除操作,另一个事务两次查询的数据不一致

幻读:一个事务对数据进行了新增操作,另一个事务两次查询的数据不一致

在需要避免“幻读“时,

就创建一个快照(通过记录数据的时间戳的方式来实现),此后这个事务中的所有读取的操作都是对于这个快照进行操作,因此就不会有”幻读“发生。对于单机来说,需要额外的存储和计算来记录并处理时间戳,对于多机来说,保持时间戳的同步也需要相当的代价,因此一般仅用于特定的场合。

通行的设置隔离级别的方式是加锁,一般分成三种情况,数据库按照语句加锁,带有加锁命令的语句,在声明事务的同时声明隔离级别。需要注意是锁会导致死锁。当发生死锁后,就需要解除死锁状态,否则更多事务在请求处于死锁状态的数据时,就会发生连锁反应,解除死锁状态的主要方式是选择回滚其中的某一个事务。解除死锁毕竟是一种消极的处理方式,积级的处理方式应当是预防死锁、避免死锁,同时辅助以检测死锁避免出现连锁反应。运行在不同计算机上的事务的隔离级别和运行在单台计算机上的隔离级别表现一致。


0 0
原创粉丝点击