zoukankan      html  css  js  c++  java
  • [mysql] 事务

    前言

    事务是数据库中很重要的一种机制,作为一个后台开发人员,事务是我们必须要了解的机制。写下这篇文章,主要是为了能够加深我对事务的理解,也是为了以后可以方便查看。要了解事务,我们需要关注以下三个大佬: 事务的基本要素 、 事务的并发问题 、 事务的隔离级别 。下面就让我来依次介绍这三个大佬。

    事务的基本要素(ACID)

     原子性(Atomicity) :一个事务里面的一系列操作要么全做,要么全不做,事务是不可分割的一个整体。

     一致性(Consistency) :事务开始前和结束后,数据库的完整性约束没有被破坏。一个事务的中间状态对外部不可见。比如,A向B转账,不可能出现A扣了钱,B却没有收到的情况。

     隔离性(Isolation) :同一时间只允许一个事物访问同一个数据,不同的事务之间彼此没有任何干扰。

     持久性(Durability) :事务完成后,事务对数据库的所有更新将被保存到数据库,不能回滚。

    注:原子性是事务隔离的基础,隔离性和持久性是手段,最终目的是为了保持数据的一致性。

    事务的并发问题

     脏读 :事务A读取了事务B更新的数据,然后事务B回滚了,那么事务A读取的数据是脏数据。

     不可重复读 :事务A读取数据d1,事务B对数据d1进行更新操作并且提交了事务B,事务A再次读取数据d1,那么事务A第一次和第二次读取的数据不一致。

     幻读 :事务A查询id=1的数据,发现没有,事务b插入了id=1的数据并且提交了事务B,事务A插入id=1的数据报错,这个时候事务A就产生了幻读。

    事务隔离级别

      读未提交(read-uncommitted) :不可以防止任何的事务并发问题,但是执行效率最高。

     读已提交(read-committed) :可防止脏读,效率低于读未提交。

     可重复读(repeatable-read) :可防止脏读、不可重复读,效率低于读已提交。(注:mysql默认事务隔离级别)

     串行化(serializable) :可防止脏读、不可重复读、幻读,效率最低。

    数据库相关操作

    查看数据库隔离级别:

    select @@tx_isolation;

    设置当前会话的事务隔离级别:

    set session transaction isolation level read uncommitted;

    设置全局的事务隔离级别

    set global transaction isolation level repeatable read;
  • 相关阅读:
    Python基础学习四 文件操作(二)
    Python基础学习三 文件操作(一)
    Python基础学习三 字符串
    Python基础学习三 字典、元组
    Python基础学习三 list-增删改查、切片、循环、排序
    python基础4文件操作
    Python基础3切片,字符串的方法,for 循环
    python2和Python3的区别(长期更新)
    Python基础1
    python 中的enumerate()函数的用法
  • 原文地址:https://www.cnblogs.com/cafebabe-yun/p/11359743.html
Copyright © 2011-2022 走看看