数据库事务Transaction

事务是数据库操作的基本逻辑单位

事务的语法

Begin transaction

    ....

    commit;

    rollback;

End  transaction

事务的ACDI特性

原子性:Atomic   操作的最小逻辑单位,要么都做,要么都不做。

一致性:Consistent  完整性约束

持久性:Durability   修改是永久的,即便数据库发生重启、故障恢复也应该保持数据不变

隔离性:Isolation   事务的并发执行互不影响

事务并发执行带来的问题

问题1:丢失修改(售出2张票,数据库中只减少了1张)

时间T1T2
t1read(A)[16]
t2read(A)[16]
t3A=A-1
t4A=A-1
t5write(A)[15]
t6write(A)[15]

问题2:都脏数据

时间T1T2
t1read(A)[16]
t2A=A-1
t3write(A)[15]
t4read(A)[15]
t5ROLLBACK[16]

问题3:不可重复读

时间T1T2
t1read(A)[16]
t2read(A)[16]
t3A=A-1
t4write(A)[15]
t5read(A)[15]

数据库的并发控制

排他锁(X锁)事务T对数据A加上X锁之后,只允许T读取和修改数据A, 其他事务对数据A不能再加任务锁,即不能再对数据A进行读写操作,直到事务T释放A上的锁。

共享锁(S锁) 事务T对数据A加上S锁之后。 就只能读取A但不可以修改,其他事务也可以对A加S锁来读取。只要A上有S锁,任何事务就只能加S锁不能加X锁。

封锁协议

三级封锁协议

(1)一级封锁协议:加X锁,解决丢失修改的问题。

(2)二级封锁协议:加S锁,解决读脏数据的问题。读完即释放S锁

(3)三级封锁协议:加S锁, 解决不可重读的问题。事务结束再释放S锁

两段锁协议

事务在读写数据之前必须加锁,释放锁之后不能再加任何锁。

严格遵守拓展阶段加锁,收缩阶段释放锁。

事务的隔离级别

事务的并发执行破坏了事务的隔离性,通过封锁协议对其进行限制,不同粒度的锁和多粒度的封锁使事务有4种不同的隔离级别。

  (1)  Read uncommitted(读未提交)   ----> 对应一级封锁协议

(2)Read committed(读已提交)      -----> 对应二级封锁协议

(3)Repeatable read(可重复读)     ------> 对应三级封锁协议

(4)Serializable(可串行化), 最高的事务隔离级别

1,2,3,4隔离级别逐渐增强

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值