数据库事务特性和隔离级别

来源:互联网 发布:如何成为cv网络配音 编辑:程序博客网 时间:2024/05/03 13:12

一.事务
事务(Transaction)是并发控制的基本单位。所谓的事务,它是一个操作序列,这些操作要么都执行,要么都不执行,它是一个不可分割的工作单位。例如,银行转账工作:从一个账号扣款并使另一个账号增款,这两个操作要么都执行,要么都不执行。所以,应该把它们看成一个事务。事务是数据库维护数据一致性的单位,在每个事务结束时,都能保持数据一致性

二.事务四大特性(简称ACID)
1、原子性(Atomicity):事务中的全部操作在数据库中是不可分割的,要么全部完成,要么均不执行。
2、一致性(Consistency):几个并行执行的事务,其执行结果必须与按某一顺序串行执行的结果相一致。
3、隔离性(Isolation):事务的执行不受其他事务的干扰,事务执行的中间结果对其他事务必须是透明的。
4、持久性(Durability):对于任意已提交事务,系统必须保证该事务对数据库的改变不被丢失,即使数据库出现故障。

三. 事务并发处理会产生的问题
1.脏读:即一个事务读取到另一事务未提交的更新数据。

2.不可重复读:在同一事务中,多次读取同一数据返回的结果有所不同。也就是说,后续读取可以读取到另一事务已提交的更新数据

3.虚读:一个事务读取到另一事务已提交的insert数据。

四.解决并发问题——–事务隔离

a.当一个事务访问某个数据库资源时,如果执行的是select语句,必须为资源加上共享锁,如果执行的是insert,update,delete语句,必须为资源加上排他锁,这些锁锁定正在被操作的资源。

b.当第二个事务也要访问相同的资源时,加锁类型一样。但此时第二个事务并非就立即能为资源加上锁,当第一个事务为资源加的是共享锁时,第二个事务能够为资源加上共享锁,但当第一个事务为资源加的是排他锁时,第二个事务必须等待第一个事务结束,才能为资源加上排他锁。

1.共享锁
共享锁用于读取数据操作,它允许其他事务同时读取锁定的资源,但不允许其他事务更新它。
2.排他锁
排他锁用于修改数据的场合,他锁定的资源,其他事务部能读取也不能修改。
3.更新锁
更新锁在更新操作初始化截断用来锁定可能要被修改的资源,从而避免使用共享锁造成的死锁现象。

五.事务隔离级别
锁机制能有效地解决并发事务时的各种问题,但是也会影响到并发的性能。所以可以设置级别减少影响。
级别从低到高:
1.未提交读(Read Uncommitted):允许脏读,也就是可能读取到其他会话中未提交事务修改的数据。
2.提交读(Read Committed):只能读取到已经提交的数据。
3.可重复读(Repeated Read):在同一个事务内的查询都是事务开始时刻一致的。
4.串行读(Serializable):完全串行化的读,每次读都需要获得表级共享锁,读写相互都会阻塞

1 0
原创粉丝点击