数据库事务四大特性————ACID

ACID-----A:Atomicity -原子性     C:Consistency -一致性     I:Isolation -隔离性    D:Durability - 持久性

事务:事物(transaction)是由一些列操作序列构成的执行单元,这些单元要么都做,要么不做,是一个不可分割的工作单元。

A:all or none

C:在事务之前,数据库具有一致性在事务结束之后数据库同样也必须具有一致性。例如A和B两个人转账,A向B转100,在转之前A和B的财产总和是X,转完之后A和B的财产总和还是X。

I:在事务执行的过程中不收并发执行的事务影响,就是说在A事务执行的时候,B事务要么在A事务执行前执行,要么在A事务执行后执行

D:一个事务的完成对数据库的改变是永久的,即使是系统遇到故障也不会丢失。


着重学习一下Isolation:对于隔离性的实现,就需要使用锁来实现,数据库中最常见的两种锁,X锁和S锁

X锁:X锁又叫做排它锁或者写锁,如果一个事务A对数据对象加上X锁,那么其他事务既不能对数据对象进行读也不能进行写,只有A事务可以对数据进行读或写

S锁:S锁又叫做共享锁或者读锁,如果一个事务A对数据对象加上S锁,那么A只能对数据进行读操作,并且其他事物只能再对数据加S锁,只有等A的所有S锁都释放后,其他事物才可以对数据对象上X锁。在数据对象上所有S锁释放前,他是不可被更改的。


举两个简单例子

A:    select * from table (请想象它需要执行很久)
B:    update table set c1='aa'

过程:
A运行 (加共享锁)
B运行  (想要加排它锁但是表已经被加上了共享锁,所以不能加X锁)
If A 还没执行完
   B等......
else
    A的共享锁释放
    B加上排他锁之后执行
endif

数据库还有另一种锁就是更新锁:更新锁的意思是,现对数据对象加上共享锁,并且拥有将共享锁升级为排它锁的资格,一个数据对象只能上一个更新锁,更新所可以和共享锁共存,但不能和排它锁共存。

T1:
begin tran
select * from table(updlock) (加更新锁)
update table set column1='hello'
T2:
begin tran
select * from table(updlock)
update table set column1='world'

更新锁的意思是:“我现在只想读,你们别人也可以读,但我将来可能会做更新操作,我已经获取了从共享锁(用来读)到排他锁
(用来更新)的资格”。一个事物只能有一个更新锁获此资格。

T1执行select,加更新锁。
T2运行,准备加更新锁,但发现已经有一个更新锁在那儿了,只好等。

当后来有user3、user4...需要查询table表中的数据时,并不会因为T1的select在执行就被阻塞,照样能查询,相比起例6,这提高
了效率。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值