数据库事务与隔离级别

数据库事务与隔离级别

数据库事务指的是单个逻辑工作单元执行的一系列数据库操作,也就是用户定义的一个完整的工作单元。

事务特性

ACID(原子性,一致性,隔离性,持久性)

原子性:将事务执行看作一个不可分割的原子,事务的整个操作要么全执行,要么全不执行

一致性:事务开始前和结束后,数据库原有的物理和逻辑约束保持一致,必须遵循数据库中各种约束和规则的要求,保持数据完整性。

隔离性:并发过程下,事务执行过程中应该相互隔离。也就是如果两个事务同时操作一条数据,事务一要么看到的是事务二修改前的数据要么是修改后的,不会看到中间态的数据

持久性:一旦事务提交后,事务所有操作就都在数据库里面生效了,数据持久存在,而事务在执行过程中,临时数据会保存在事务日志文件中,以便于提交或者回滚。

隔离级别

Read uncommitted 读未提交

读取另一事务未提交的数据,违背了隔离性原则,会出现脏读

脏读:事务一读取到了事务二中间态的数据,事务二有可能会再次修改数据或者回滚,导致事务一读取到的是脏数据

Read committed 读提交(SqlServer和oracle的默认隔离级别)

只能读取另一事务开始前或者提交后的数据,解决脏读现象,出现不可重复读

不可重复读:由于事务二修改操作,事务一两次读取结果可能不一致

Repeatable read 重复读(MySQL的默认隔离级别)

在事务一开始时创建一个数据库快照,那么事务一所操作的数据就是这个快照里面的数据。事务二修改数据不会影响事务一,解决了脏读和不可重复读。但是若事务二新增了数据,事务一仍然可以查询到这条新增的数据,出现幻读

幻读:由于事务二新增操作,事务一两次读取操作结果数量不一致性,结果多出一条

Serializable 序列化执行

所有序列依次执行,没有并发,所以不存在其他并发问题,但是因此也会导致效率较低,对数据库性能消耗也较大,一般不建议使用。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值