mysql事务笔记

mysql事务相关介绍

事务简介

事务就是一组原子性的SQL语句,或者说是一个独立的工作单元。
事务内的语句,要么全部执行成功,要么全部执行失败。

事务的特性

  • 原子性
事务是数据库的逻辑工作单元,事务中的各种操作要么都做,要么都不做。
  • 一致性
事务执行的结果必须是使数据库从一个一致性状态转变成另一个一致性状态。
当事务提交成功后,就说数据库处于一致性状态。
相反,当事务执行过程中出现异常,某一条sql语句执行失败,事务提交失败,就说数据库处于不一致状态。
  • 隔离性
事务的执行过程中不受其他事务的干扰。
即一个事务内部的操作及使用的数据对其它并发事务是隔离的,并发执行的各个事务之间不能互相干扰。
  • 持久性
指一个事务一旦提交,它对数据库中的数据的改变就应该是永久性的。
接下来的其它操作或故障不应该对其执行结果有任何影响.

事务的隔离级别(由低到高)

  • Read uncommitted(读未提交)
所有事务都可以看到其他未提交事务的执行结果
当两个事务对同一个表进行操作时,共享数据
读取未提交的数据,也被称之为脏读
例如:
    A事务开启
    B事务开启
    A事务对user表进行了增加新用户操作
    B事务读取所用user数据,其中包含了A事务的那条新增数据
    A事务提交
    B事务提交
  • Read committed(读提交)
读取提交的数据。
但是,可能多次读取的数据结果不一致(不可重复读,幻读)。
用读写的观点就是:读取的行数据,可以写。

比如: 
      A事务开启
      B事务开启
      B事务读取所有user表数据  userdata1
      A事务添加一条用户数据到user表
      A事务提交
      B事务再次读取所有user表数据 userdata2,此时userdata2中包含了A事务新增的那条记录.
      B事务提交
  • Repeatable read(重复读)
它确保同一事务的多个实例在并发读取数据时,会看到同样的数据行.
会出现幻读
第一个事务对一个表中的数据进行了修改,这种修改涉及到表中的全部数据行。
同时,第二个事务也修改这个表中的数据,这种修改是向表中插入一行新数据。
那么,以后就会发生操作第一个事务的用户发现表中还有没有修改的数据行,
就好象发生了幻觉一样。

比如:
    A事务开启
    B事务开启
    B事务读取所有user表数据  userdata1
    A事务添加一条用户数据到user表
    A事务提交
    B事务再次读取所有user表数据 userdata2,此时userdata2 = userdata1.
    B事务提交

幻读:
    A事务开启
    B事务开启
    A事务更新所有user为超级用户
    B事务新增一条数据 user为普通用户
    A事务查询所有用户,发现了B事务新增的那条普通用户,出现幻读,命名全部更新了的啊
    A事务提交
    B事务提交
  • Serializable(序列化)
可读,不可写。像java中的锁,写数据必须等待另一个事务结束

例如:
    A事务开启
    B事务开启
    A事务向User表新增数据
    B事务向User表新增数据(失败:可读不可写)
    B事务读取user数据
    A事务提交
    B事务向User表新增数据(成功)
    B事务提交
Read Uncommited: 出现 脏读 , 不可重复读, 幻读
Read commited : 出现 不可重复读, 幻读
Repeatable read : 出现 幻读
Serializable : 上述几个现象都不出现

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

阅读更多
版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/m1126m/article/details/79968208
个人分类: mysql
想对作者说点什么? 我来说一句

mysql笔记 mysql笔记

2018年04月24日 993B 下载

MySQL学习笔记

2017年12月19日 1.89MB 下载

没有更多推荐了,返回首页

不良信息举报

mysql事务笔记

最多只允许输入30个字

加入CSDN,享受更精准的内容推荐,与500万程序员共同成长!
关闭
关闭