一、MySQL事务

一、事务

    1、事务四大特性(ACID)

  • 原子性(Atomicity):一个事务中的所有操作,要么都完成,要么都不执行。对于一个事务来说,不可能只执行其中的一部分。

  • 一致性(Consistency):数据库总是从一个一致性的状态转换到另外一个一致性状态,事务前后数据的完整性必须保持一致。。

  • 隔离性(Isolation):一个事务所做的修改在最终提交以前,对其它事务是不可见的,多个事务之间的操作相互不影响。

  • 持久性(Durability):持久性是指一个事务一旦被提交,它对数据库中数据的改变就是永久性的,接下来即使数据库发生故障也不应该对其有任何影响。

    2、隔离级别

        (1)、Read Uncommitted(读取未提交内容):一个事务可以看到其他事务已执行但是未提交的结果。本隔离级别很少用于实际应用,因为它的性能也不比其他级别好多少,并且存在脏读问题。

        (2)、Read Committed(读取提交内容):一个事务只能看到其他事务已执行并已提交的结果(Oracle、SQL Server默认隔离级别)。这种隔离级别支持不可重复读,因为同一事务的其他实例在该实例处理其间可能会有新的commit,所以同一select可能返回不同结果。

        (3)、Repeatable Read(可重读):同一事务的多个实例在并发读取数据时,会看到同样的数据行(MySQL的默认事务隔离级别)。存在幻读问题,InnoDB和Falcon存储引擎通过多版本并发控制(MVCC,Multiversion Concurrency Control)机制解决了该问题。

        (4)、Serializable(可串行化):最高的隔离级别,它通过强制事务排序,使之不可能相互冲突,从而解决幻读问题。它是在每个读的数据行上加上共享锁。在这个级别,可能导致大量的超时现象和锁竞争。

  • 脏读:事务A读取了事务B更新的数据,然后B回滚操作,那么A读取到的数据就是脏数据

  • 不可重复读:事务A多次读取同一数据,事务B在事务A多次读取的过程中,对数据作了更新并提交,导致事务A多次读取同一数据时,结果不一致。

  • 幻读:A事务在执行过程中,B事务插入了符合A事务查询条件的数据,导致A事务两次读取的数据不一致。

        不可重复读和幻读的区别:

            不可重复读是由update引起的,需要用锁行来避免;幻读是由insert或delete引起的,需要用锁表来避免。

√:可能出现    ×:不会出现

事务隔离级别

脏读

不可重复读

幻读

Read Uncommitted

Read Committed

×

Repeatable Read

×

×

Serializable

×

×

×

        (5)、注:每降低一个事务隔离级别都能提高数据库的并发

            ①、读未提交:其它事务未提交就可以读

            ②、读已提交:其它事务只有提交了才能读

            ③、可重复读:只管自己启动事务时候的状态,不受其它事务的影响(mysql默认)

            ④、事务串行:按照顺序提交事务保证了数据的安全性,但无法实现并发    

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值