您的位置:首页 > 数据库

数据库 事务级别介绍

2018-03-30 12:30 274 查看
数据库 事务级别介绍

2个概念:事务,锁。

事务:逻辑单元内的一系列操作,要么全部完成执行,要么全部不执行。

锁:将某数据的操作加锁,则其他人无法获取当前数据的当前操作。避免单位时间内的数据覆盖,影响数据的一致性。

事务是多个操作的执行逻辑与的集合。事务内控制加锁,实现不同的级别。事务内的锁,需等事务结束才能释放锁。不加事务的锁,操作完即释放锁。

三操作:

读,rade -R

写,write -W

增,add -A

锁分类:锁住操作,避免其他人获取。

写操作枷锁 排它锁 X 锁

读操作加锁 共享锁 S 锁。

(X锁与S锁无法共存,一个数据即只能取一种锁)

事务级别:

Read Uncommitted –1个事务,1个X锁,即对写数据枷锁。读无锁。

对写枷锁,避免了数据的覆盖,丢失。但是事务内可读,存在读取未提交或回滚的数据,出现脏数据。 该级别是数据库最低级别。

Read Committed –1个事务,2个锁。事务内X锁。

读写的枷锁,避免了数据丢失与脏数据。若是在多数据单元处理时,一条记录加事务,未加事务的记录,因可做写操作,不能重复读。否则数据前后读取不一致。

Repeatable read —2个事务,2个锁。

避免了数据的丢失,脏,以及不可重复读情况。但是在事务内操作的情况下,数据库增加记录不可控,即会出现符合是事务内搜索条件的记录,但是不添加进事务。事务执行完,即有满足条件为修改的数据,为幻读。

Serializable 串行化。即不可并行操作数据库。

避免上述问题,但是影响数据库的效率。

延伸:MVCC 多版本控制—multi-Version current control

MySql数据库中实现

读操作不加锁情况下实现可重复读。

对数据库记录增加 事务ID 与回滚指正字段




事务ID 递增。

每次读取操作是,增加一个 read view 的数据结构,控制数据的版本信息。

read view 中包含 当前事务列表,Tmin Tmax .

通过事务ID 来实现数据的可见性。只有在上次提交后 本次事务前的数据记录可见。即事务内的一次读取的数据在被修改后,二次读取的还是事务前的记录数据。



详情见 刘欣 码农翻身公众号 数据库旺财与小强。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: