zoukankan      html  css  js  c++  java
  • mysql数据库隔离级别

    # 原创,转载请留言联系

    事务的隔离级别 (由高到低)
    1.串行化(serializable):一个事务一个事务的执行
    2.可重复读(Repeatable-Read) 可重复读,无论其他事务是否修改并提交了数据,在这个事务中看到的数据值始终不受其他事务影响  (mysql数据库所默认的级别)
    3.读已提交(Read Committed)  读取已提交,其他事务提交了对数据的修改后,本事务就能读取到修改后的数据值(大多数数据库默认的隔离级别)
    4.读未提交:(Read Uncommitted)  读取未提交,其他事务只要修改了数据,即使未提交,本事务也能看到修改后的数据值。

    结合实际流程理解一下:

    1.串行化 serializable

    串行化就是一个事务一个事务的执行。一个事务未执行完毕,另一个事务不能执行。例如上面的购买商品流程。用户A购买商品时,开始一个事务。在这个事务未执行完的时候,用户B不能开始事务。

    2.可重复读 Repeatable-Read

    可重复读就是一个事务里,无论查找多少遍,都是一样的结果,即使另一个事务对数据进行了更改,查到的结果也是永远一样。例如,用户A开始了事务,查询商品的库存为3。即使用户B这时候开始事务,然后完成了事务,修改了库存,提交了事务。但是用户A的事务在查询商品的库存永远都是3,并不会因为用户B的事务更改了库存而更新数据。它是独立于一个事务的。Mysql默认的隔离级别就是可重复读。

    3.读已提交 Read Committed

    读已提交是其他事务提交了对数据的修改后,本事务就能读取到修改后的数据值。

    例如,用户A开始了事务,查询商品数据是3。这时候,用户B开始了事务,修改了商品库存为1,并且事务提交了。这时候A的事务再查询库存的时候,库存不再是3了,而是1。

    很多数据库的默认隔离级别都是读已提交。

    4.读未提交 Read Uncommitted

    读未提交是其他事务只要修改了数据,即使未提交,本事务也能看到修改后的数据值。例如,用户A开始了事务,查询商品库存是3。这时候用户B开始了事务,先修改了商品库存为1,但是还没有提交。即使这样,用户A的事务再查询商品库存时,查到的库存也是1。

    ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

    在用乐观锁的时候,必须要把mysql的隔离级别设置为读已提交。

    Ubuntu下的设置方法:

    方式一:

    1. 使用vi打开mysql配置文件
       sudo vi /etc/mysql/mysql.conf.d/mysqld.cnf

    2. 在文件的最末尾添加如下配置, 指定mysql数据库的隔离级别为READ-COMMITTED,如下图
       # 可选参数有:READ-UNCOMMITTED, READ-COMMITTED, REPEATABLE-READ, SERIALIZABLE.
       transaction-isolation=READ-COMMITTED
       
    3. 在终端中重启mysql服务
       sudo service mysql restart

    方式二:

    1. 进入mysql终端
    2. 查看当前事务隔离级别
        select @@global.tx_isolation;

    3. 设置隔离级别,可选的参数READ UNCOMMITTED  | REPEATABLE READ | SERIALIZABLE
        SET GLOBAL TRANSACTION ISOLATION LEVEL READ COMMITTED;

  • 相关阅读:
    人脸识别算法初次了解
    白话经典算法系列之二 直接插入排序的三种实现
    常见浏览器兼容性问题与解决方式
    MP3的频率、比特率、码率与音质的关系
    程序猿接私活经验总结,来自csdn论坛语录
    Java虚拟机工作原理具体解释
    簡單SQL存儲過程實例
    全栈JavaScript之路(七)学习 Comment 类型节点.
    strdup函数的使用方法
    POJ 2823 Sliding Window 【单调队列】
  • 原文地址:https://www.cnblogs.com/chichung/p/10065306.html
Copyright © 2011-2022 走看看