数据库事务的四大特性和隔离级别
admin
2023-06-07 09:01:25
0

数据库事务(Database Transaction) ,是指作为单个逻辑工作单元执行的一系列操作,要么全部执行,要么全部都不执行。

一个逻辑工作单元要成为事务,必须满足事务的四大特性(ACID)。即原子性(Atomic)、一致性(Consistent)、隔离性(Insulation)和持久性(Duraction)。

原子性(Atomic):事务是一个完整的操作,事务的各个操作步骤是不可分的。即要么都执行,要么都不执行。

一致性(Consistent):事务执行的结果必须使数据库从一个一致性状态变到另一个一致性状态

隔离性(Insulation):系统必须保证事务不受其他并发执行事务的影响。对任何一对事务T1和T2,在T1看来,T2要么在T1开始之前已经结束,要么在T1完成之后再开始执行。隔离通过并发控制机制实现。

持久性(Duraction):事务一旦提交到数据库,它对数据库的更新不再受后续操作或故障的影响。


如果我们不考虑事务的隔离性,将会造成以下情况发生:

1、脏读

脏读是指一个事务处理过程中读取了另一个未提交事务的数据。

2、不可重复读

不可重复读是指在对数据库中的某个数据,一个事务多次读取却返回不一样的结果。这是由于在查询的时候,被另一个事务修改提交了。

3、幻读

幻读是事务非独立执行时发生的一种现象。例如事务T1对一个表中的所有行的某个数据从“Y”修改成“N”,此时事务T2正在向数据库插入一条记录,数值是“Y”。然后操作事务T1的用户再次查看刚刚修改的数据后,会发现还是有一个数值为“Y”的数据记录。其实是事务T2添加的数据,这就产生了幻读。


数据库事务的隔离级别有4个,由低到高依次为Read uncommittedRead committedRepeatable readSerializable,这四个级别可以逐个解决脏读不可重复读幻读这几类问题。


脏读
不可重复读
幻读
Read uncommitted
Y
Y
Y

Read committed

N
Y
Y
Repeatable read
N
N
Y
Serializable
N
N
N


Read uncommitted(读未提交)

例如:A向B转账5000元,但是A刚开始转了8000给B账户,但是还没有提交事务。然后现在B去账户里面查多了8000,A后面发现多转了,于是就重新回滚事务转了5000给B账号,等B下次再去查看的时候发现是5000,这就产生了脏读。

Read committed(读提交)

singo拿着工资卡去消费,系统读取到卡里确实有2000元,而此时她的老婆也正好在网上转账,把singo工资卡的2000元转到另一账户,并在singo之前提交了事务,当singo扣款时,系统检查到singo的工资卡已经没有钱,扣款失败,singo十分纳闷,明明卡里有钱,为何......

出现上述情况,即我们所说的不可重复读,两个并发的事务,“事务A:singo消费”、“事务B:singo的老婆网上转账”,事务A事先读取了数据,事务B紧接了更新了数据,并提交了事务,而事务A再次读取该数据时,数据已经发生了改变。

当隔离级别设置为Read committed时,避免了脏读,但是可能会造成不可重复读。

Repeatable read (重复读)

当隔离级别设置为Repeatable read时,可以避免不可重复读。当singo拿着工资卡去消费时,一旦系统开始读取工资卡信息(即事务开始),singo的老婆就不可能对该记录进行修改,也就是singo的老婆不能在此时转账。

虽然Repeatable read避免了不可重复读,但还有可能出现幻读。

singo的老婆工作在银行部门,她时常通过银行内部系统查看singo的信用卡消费记录。有一天,她正在查询到singo当月信用卡的总消费金额(select sum(amount) from transaction where month = 本月)为80元,而singo此时正好在外面胡吃海塞后在收银台买单,消费1000元,即新增了一条1000元的消费记录(insert transaction ... ),并提交了事务,随后singo的老婆将singo当月信用卡消费的明细打印到A4纸上,却发现消费总额为1080元,singo的老婆很诧异,以为出现了幻觉,幻读就这样产生了。

Serializable (序列化)

Serializable是最高的事务隔离级别,同时代价也花费最高,性能很低,一般很少使用,在该级别下,事务顺序执行,不仅可以避免脏读、不可重复读,还避免了幻像读。






相关内容

热门资讯

AI热潮下的公关困境:英国企业... IT之家 5 月 24 日消息,据《卫报》今天报道,各大公关企业表示,英国各大公司如今正在想方设法把...
原创 6... 最近手机圈可太热闹了,小米、iQOO、红米、联想一个接一个地发新机,后面还有一大堆在路上,简直就跟下...
伊朗方面披露美伊或将签署的备忘... △伊朗德黑兰(资料图)总台记者24日自伊朗多个消息渠道了解到伊朗与美国或将签署的备忘录草案的部分内容...
京东工业发布AI智采管家 助力... 当前,新一轮科技革命与产业变革加速演进,人工智能正成为推动中国工业转型升级的核心引擎。长期以来,中小...
2026三门峡横渡母亲河活动启... 5月24日,2026年“大江大河”全国群众公开水域游泳系列赛(三门峡站)暨2026中国·三门峡横渡母...
led吸顶灯一半亮一半不亮怎么... 当 LED 吸顶灯一半亮一半不亮时,可能是以下原因导致的:1. LED 灯珠损坏:部分 LED 灯珠...
不让孩子看电视的方法 孩子们在成长过程中,电视是他们的一种娱乐方式,但是看电视时间过长会对孩子的健康和发展产生**影响。所...
奥克斯全自动洗衣自动进水管进水... 1、可能是水位开关性能不良,不能精准的识别水位,引起进水太多导致的。2、可能是溢水管本身损坏造成的。...
全自动洗衣机水管加长方法 对于家庭使用的全自动洗衣机来说,水管长度是需要考虑的重要问题。如果水管长度不够,就会给使用带来很多麻...
全自动洗衣机排水管怎么安装方法 波轮洗衣机排水管的更换方法:1、更换排水管前需要先准备一款新的排水管,更换排水管前不要忘记断开洗衣机...