事务的相关概念

事务(Transaction)

什么是事务
1.事务是并发控制的单元, 所谓事务, 它是一个操作序列, 这些操作要么都执行,要么都不执行, 它是一个不可分割的单位. 在关系型数据库中,一个事务可以是一条sql语句,一组sql语句,整个程序。

事务的四大特性(ACID)
1.A(Atomic)
(1)原子性 : 事务中包含的操作被看作一个逻辑单元,对于事务进行的增加修改等操作,要么都执行,要么都不执行
2.C(Consistency)
(1)一致性 : 事务在完成时, 必须所有的数据都保持一致状态
①而且在相关数据中,所有的规则都必须应用于事务的修改,以保持所有数据的完整性
3.I(Isolation)
(1)隔离性 : 事务与事务之间是隔离开的,事务在正确提交之前,他可能的结果不应该显示给其他事务
4.D(Durability)
(1)持久性 : 事务正确提交之后, 结果将永远保存在数据库中。

并发下事务会产生什么问题?
1.更新丢失 : 两个事务都去企图更新同一行数据,导致事务抛出异常退出, 那么两个事务的更新白费
2.脏读 : 一个事务读到另一个事务没有提交的数据
3.不可重复读 : 一个事务范围两个相同的查询却返回了不同的数据
4.幻读 : 一个事务读第一次取到的数据比后来读取到的数据条目少或多

事务的隔离级别(Isolation level)
1.事务的隔离级别,就是为了解决以上几种问题而出现的
2.事务的隔离级别越高,在并发情况下产生的问题就越小,但是同时付出的性能消耗就越大,因此很多时候必须在并发与性能之间做一个权衡

隔离级别
1.读操作未提交(ISOLATION_READ_UNCOMMITTED)
允许读取未提交的数据,无法避免脏读,幻读,不可重复读
2.读操作已提交(ISOLATION_READ_COMMITTED)
只允许读取已经提交的数据,可以避免脏读,但是无法避免幻读,不可重复读
3.可重复读(ISOLATION_REPEATABLE_READ) : MySQL的默认隔离级别
说明事务保证能够再次读取相同的数据,能够避免脏读,不可重复读,不可以避免幻读
4.串行化(ISOLATION_SERIALIZABLE)
提供了非常严格的事务隔离,能够保证任何并发情况下的问题发生,但是效率最低,因此没人使用

隔离级别脏读不可重复读幻读
read uncommitted(未提交读)
read committed(提交读)×
repeatable read(可重复读)××
serializable (可串行化)×××
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值