mysql事务相关知识点

事务概念

什么是事务?: 多条sql语句要么全部成功要么全部失败。

事务的特性

数据库事务特性原子性(Atomic)、一致性(Consistency)、隔离性(Isolation)、持久性 (Durabiliy)。简称ACID

 原子性组成一个事务的多个数据库操作是一个不可分割的原子单元只有所有操作都成功 整个事务才会提交。任何一个操作失败已经执行的任何操作都必须撤销让数据库返回初始 状态。

 一致性事务操作成功后数据库所处的状态和它的业务规则是一致的。即数据不会被破坏。 如A转账100元给B不管操作是否成功AB的账户总额是不变的。

 隔离性在并发数据操作时不同的事务拥有各自的数据空间它们的操作不会对彼此产生干扰

 持久性一旦事务提交成功事务中的所有操作都必须持久化到数据库中。

什么是脏读、幻读和不可重复读

脏读:读到了其他事务还没有提交的数据。
       就比如,现在有两个事务,事务1在修改了id为1的数据,还没提交事务,事务2此时查询id为1的数据。

不可重复读:对某数据进行读取过程中,有其他事务对数据进行了修改(UPDATE、DELETE),导致第二次读取的结果不同。

幻读:事务在做范围查询过程中,有另外一个事务对范围内新增或删除了记录(INSERT,DELETE),导致范围查询的结果条数不一致。还有一个例子,当查询一条数据时,发现没有,但是使用insert增加数据时,又发现是已经存在。

事务的隔离级别

所谓事务隔离级别,是数据库管理系统(DBMS)中用于定义事务处理过程中不同事务之间可见性和相互影响程度的一套标准。

事务隔离级别的主要目的是平衡数据的一致性和系统的并发性,一般来说更高的隔离级别虽然能提高数据的一致性,但同时也可能降低系统的并发能力。
mysql有4种隔离级别来解决脏读、幻读、不可重复读等这些异常情况,从高到底依次为:

可串行化(Serializable)

可重复读(Repeatable reads)

提交读(Read committed

未提交读(Read uncommitted)

未提交读(Read uncommitted)是最低的隔离级别。通过名字我们就可以知道,在这种事务隔离级别下,一个事务可以读到另外一个事务未提交的数据。这种隔离级别下会存在幻读、不可重复读和脏读的问题。

提交读(Read committed)也可以翻译成读已提交,通过名字也可以分析出,在一个事务修改数据过程中,如果事务还没提交,其他事务不能读该数据。所以,这种隔离级别是可以避免脏读的发生的。

可重复读(Repeatable reads),由于提交读隔离级别会产生不可重复读的读现象。所以,比提交读更高一个级别的隔离级别就可以解决不可重复读的问题。这种隔离级别就叫可重复读。但是这种隔离级别没办法彻底解决幻读。

可串行化(Serializable)是最高的隔离级别,前面提到的所有的隔离级别都无法解决的幻读,在可串行化的隔离级别中可以解决。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值