数据库事务总结

1.事务简介

事务:简短来说就是一组操作要么全部完成,要不全部不完成。不存在只执行一部分的操作。

事务回滚:当一个事务执行过程中发生了异常、错误,则回到没有执行事务之前的状态。

事务提交:当一个事务执行过程了没有发生任何异常,错误,这时我们就要保存这个事务的修改。

2.事务的四大特性

1.原子性(Atomicity)

整体 【原子性是指事务包含的所有操作要么全部成功,要么全部失败】

 

2.一致性(Consistency)

数据 【事务提交后的状态合集称为一致,也就是数据库只包含事务提交的状态】

3.隔离性(Isolation)

并发 【对于任意两个并发的事务A和B,在事务A看来,B要么在A开始之前就已经结束,要么在A结束之后才开始,这样每个事务都感觉不到有其他事务在并发地执行。】

4.持久性(Durability)

结果 【持久性是指一个事务一旦提交了,就保存到硬盘上,对数据库中的数据的改变就是永久性的】

3.事务隔离问题

由于事务可包含多个操作,在多个客户端并发访问过程,可能会发生一个事务只做了一部分操作,此时另外一个事务也开始执行,那么前一个事务的只执行部分操作的中间状态会给第二个事务造成影响。


①、读未提交读(Read Uncommitted),也称脏读,一个事务读到另一个事务未提交的内容

事务B读看到事务A没有提交的内容,比如对A、B账户的修改。

②、不可重复读(Read Committed),一个事务读到另一个事务已提交的内容(主要是数据更新)

此级别解决了读未提交读的问题,即其它事务没有提交的内容对本事务不可见。
但是事务B能读到事务A提交的数据更新内容。

③、可重复读(Repeatable Read),虚读(幻读):一个事务读到另一个事务已提交的内容(主要是数据插入)

此级别解决了读未提交读不可重复读的问题,
事务B能读到事务A提交的数据插入内容。

④、可串行化(Serializable):最高的隔离级别,通过强制事务排序,使之不可能相互冲突,从而解决幻读问题。

4.事务锁

为了解决事务隔离性问题,引入锁的概念, 只 有 拿 到 锁 的 事 务 才 可 对 数 据 库 进 行 读 写 操 作 \color{red}只有拿到锁的事务才可对数据库进行读写操作 只有拿到锁的事务才可对数据库进行读写操作。事务有两种锁,并且有相应的权限。
①、读锁,也称为共享锁。某个事务A拿到该锁时,事务A只能进行读操作,此时其他事务也可以拿到这把锁(共享)。
②、写锁,也称为排它锁。某个事务A拿到该锁时,事务A能进行读、写操作,此时其他事务不能拿到这把锁(排它)。

如果某个事务A拿到了读锁,其它事务可以拿到读锁(共享),但是无法获取写锁。
如果某个事务A拿到了写锁,其他事务既不能拿到写锁,也拿不到读锁!
③、锁的粒度

所谓锁的粒度,就是锁的范围,比如如果锁的范围是一张表,则事务A获取写锁后,只能事务A进行读、写,其他事务全部要靠边站。
如果锁的粒度是事务A需要操作的某几行记录,其它记录如果其他事务拿到锁仍然可以读、写。

一般情况下,锁的粒度越小(锁的范围小),则并发问题解决越好(事务都是并发执行),但是效率越低,因为需要大量的资源来确保各个事务的锁的粒度没有交集、冲突。

锁的粒度越大(锁的范围大),则并发问题解决越差(其他事务都在等待),但是效率较高,因为不要资源来控制各个事务的锁粒度交集问题。
 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值