【事务一】数据库事务

 

        我跟事务可能结了很久的仇,总是因为它被同事们各种笑话,我也甚是惭愧hahahahaha~,今儿闲了来整理一下

一、事务模型

1. 自动事务:在事务中,事务自动提交,发生错误时自动回滚。系统自动默认

2.隐式事务:每一条数据操作语句都自动地成为一个事务,事务的开始是隐式的,事务的结束有明确的标记。需要commit、rollback语句提交或回滚当前事务

3. 显式事务:每个事务都有显式的开始和结束标记。当使用starttransaction、commit时发生显示事务

二、事务特性

       数据库事务的特性ACID,不用说也是必知的,看好了是这几只Atomicity、Consistency、Isolation、Durability,一般有疑问或者容易出问题的一般在隔离性上

1、原子性(Atomicity):事务的操作要么全执行要么全不执行;

2、一致性(Consistency):事务前后,数据库的状态都必须处于一致状态;

3、隔离性(Isolation):一个事务的执行过程不受其它事务的干扰;

4、持久性(Durability):事务一旦提交,对数据库做出的更新是永久的;

三、并发控制

       数据库中的数据一般是多个用户共享的资源,而多个用户对数据库同时操作就产生了并发行为,对并发行为的控制有两种方式:

串行控制:一个事务完成之后,再开始另一个事务,按顺序执行。

并行控制:多个事务同时执行。

       事务是并发控制的基本单位,保证事务ACID的特性是事务处理的首要任务,而并发操作有可能会破坏其ACID特性。由并发引起的数据不一致有以下几种情况:

1. 丢失更新:两个事务同时更新一行数据,一个事务对数据的更新把另一个事务对数据的更新覆盖了。

2. 脏读:在一个事务处理过程里读取了另一个未提交的事务中的数据。

3.不可重复读:在一个事务内多次读取某个数据,读取结果却不同。这是由于在查询间隔,被另一个事务修改并提交了。

4.幻读:一个事务内读取到了别的事务插入或删除的数据,导致前后读取不一致。幻读解决了不可重复读,保证在同一个事务里,查询的结果都是事务开始时的状态(一致性),但是如果在该事务期间另一个事务同时提交了新数据,那么在本事务更新时,就会发现这些新数据,以至之前读到的数据是虚幻的。

区别:

       不可重复读和幻读都是读取了另一条已经提交的事务。不可重复读查询的都是同一个数据项,而幻读针对的是一批数据整体(比如数据的个数)。

       不可重复读是由于另一个事务对数据的更改所造成的,而幻读是由于另一个事务插入或删除引起的

四、隔离级别

       事务的隔离机制是为了防止事务之间的相互影响,保证数据的一致性。事务的隔离级别有四级,默认隔离级别是“可重复读”(REPEATABLE READ)。

1. 未提交读(ReadUncommitted):允许脏读,但不允许更新丢失。如果一个事务在写数据,则不允许另一个事务同时进行写操作,但允许其他事务读此行数据。该隔离级别可以通过“排他写锁”实现。

2.提交读(ReadCommitted):允许不可重复读取,但不允许脏读。读取数据的事务允许其他事务继续访问该行数据,但是未提交的写事务将会禁止其他事务访问该行。该隔离级别可以通过“瞬间共享读锁”和“排他写锁”实现。

3.可重复读(RepeatableRead):禁止不可重复读取和脏读,但是会出现幻读。读取数据的事务将会禁止写事务(但允许读事务),写事务则禁止任何其他事务。该隔离级别可以通过“共享读锁”和“排他写锁”实现

4.串行化(Serializable):提供严格的事务隔离。它要求事务序列化执行,事务只能一个接着一个地执行,不能并发执行。仅仅通过“行级锁”是无法实现事务序列化的,必须通过其他机制保证新插入的数据不会被刚执行查询操作的事务访问到。

       四个级别的隔离性逐渐增强,隔离级别越高,越能保证数据的完整性和一致性,但是对并发性能的影响也越大。一般情况下优先将数据库系统的隔离级别设为RC,它可以避免脏读,并且有较好的并发性能,但是会导致不可重复读、幻读,在出现这些问题时,可由程序采用悲观锁、乐观锁来控制。

PS:

       整理了好久好久都要整完了,一个手误把东西都删除了,心哇凉哇凉的,又从新来了一遍,,,锁就先不整理了

        ~~~~~~

       很久没来这里,甚是想念

       这段时间没有结婚,没有生娃,也没有去浪迹天涯,,,嗯~我只是陷入加班不能自拔了。。。

 

  • 3
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值