本网站(662p.com)打包出售,且带程序代码数据,662p.com域名,程序内核采用TP框架开发,需要联系扣扣:2360248666 /wx:lianweikj
精品域名一口价出售:1y1m.com(350元) ,6b7b.com(400元) , 5k5j.com(380元) , yayj.com(1800元), jiongzhun.com(1000元) , niuzen.com(2800元) , zennei.com(5000元)
需要联系扣扣:2360248666 /wx:lianweikj
数据库面试题之什么是事务和其属性描述?
奔跑的男人 · 857浏览 · 发布于2019-09-24 +关注

什么是事务

事务(Transaction),一般是指要做的或所做的事情。在计算机术语中是指访问并可能更新数据库中各种数据项的一个程序执行单元(unit)。但并非所有的数据库操作都叫做事务,我们可以通过四个属性来描述事务:


事务的属性(ACID)

1.原子性(Atomicity): 事务中包含的操作集合,要么全部操作执行完成,要么全部都不执行。即当事务执行过程中,发生了某些异常情况,如系统崩溃、执行出错,则需要对已执行的操作进行回滚,清除所有执行痕迹。

2. 一致性(Consistency): 事务执行前和事务执行后,数据库的完整性约束不被破坏。即事务的执行是从一个有效状态转移到另一个有效状态。

3.隔离性(Isolation): 多个事务并发执行时,彼此之间不应该存在相互影响。隔离程度不是绝对的,每个数据库都提供有自己的隔离级别,每个数据库的默认隔离级别也不尽相同。

4.持久性(Durability): 事务正常执行完毕后,对数据库的修改是永久性的。即事务的修改操作已经记录到了存储介质中。


隔离级别(Isolation Level)

1.读未提交(Read Uncommitted): 一个事务执行过程中可以读取到其他事务对数据的未提交修改。即事务的修改阶段未加排他锁,对其他事务可见。例如事务 1 可能读取到只是事务 2 中某一步的修改状态,即存在脏读的现象。

2. 读提交(Read Committed): 一个事务执行过程中只能读取到其他事务对数据的提交后修改。即事务的修改阶段加了排它锁,直到事务结束才释放,执行读命令那一刻加了共享锁,读完即释放,以此维持事务修改阶段对其他事务的不可见。例如事务 1 读取到的只能是事务 2 提交完成后的状态。该隔离级别避免了脏读现象,但正是由于事务 1 可能读取到的是事务 2 修改完成后的数据,以致出现了不可重复读现象。

3. 可重复读(Repeatable Reads): 一个事务过程中不允许其他事务对数据进行修改。即事务的读取过程加了共享锁,事务的修改过程加了排它锁,并一直维持锁定状态直到事务结束。因为事务的读取或修改都需要维持整个阶段的锁定状态,所以避免了脏读和不可重复读现象。但是因为只对现有的记录上进行了锁定,并未维持间隙锁/范围锁,导致某些数据记录的插入未受阻拦,即存在幻读现象。

4. 可串行化(Serializable): 一个事务在执行过程中不允许其他事务对指定范围数据进行修改。即事务过程中若指定了操作集合的范围,则在可重复读的锁基础上增加了对操作集合的范围锁,通过增加范围锁避免了幻读现象。


脏读 、幻读 、 不可重复读的举例说明

脏读 : 指一个事务读取了另外一个事务未提交的数据。

20190923115311723.png

幻读 : A事务读取B事务提交的新增数据,会引发幻读问题。(针对新增和删除)

20190923115421516.png


不可重复读 : 在一个事务内读取表中的某一行数据,多次读取结果不同。(这个不一定是错误,只是某些场合不对)(针对修改)

页面统计查询值:

20190923115527862.png


点击生成报表的时候,B有人转账进来300(事务已经提交):

20190923115736786.png


相关推荐

使用SELECT语句检索数据

奔跑的男人 · 793浏览 · 2019-06-03 09:33:43
部署MySQL延迟从库的几个好处

吴振华 · 657浏览 · 2019-05-14 21:57:51
MongoDB凭什么跻身数据库排行前五?

iamitnan · 716浏览 · 2019-06-18 10:04:56
Oracle开启和关闭的几种模式

qq2360248666 · 738浏览 · 2019-06-04 10:18:47
加载中

0评论

评论
分类专栏
小鸟云服务器
扫码进入手机网页