zoukankan      html  css  js  c++  java
  • mysql 开发进阶篇系列 6 锁问题(事务与隔离级别介绍)

    一.概述

      在数据库中,数据是属于共享资源,为了保证并发访问的一致性,有效性,产生了锁。接下来重点讨论mysql锁机制的特点,常见的锁问题,以及解决mysql锁问题的一些方法或建议。 相比其他数据库,mysql 锁机制比较简单,显著的特点是:不同的存储引擎支持不同的锁机制。在innodb中支持行锁和表锁,默认行锁。

      mysql 的三种锁归纳如下:
      表级锁:开销小,加锁快,不会出现死锁,锁定粒度大,发生锁冲突的概率最高,并发度最低
      行级锁:开销大,加锁慢;会出现死锁,锁定粒度最小,发生锁冲突的概率最低,并发度最高
      页面锁:开销和加锁时间界于表锁和行锁之间,会出现死锁,并发度一般
      在不同sql语句执行,会采用不同的锁,由mysql 内部自动加锁,解锁,以及对应的锁类型。重点介绍mysql表锁和innodb行锁。由于MyisAm将被innodb取代了,后面重点讲innodb。

      1. 事务介绍

        innodb的二个特点是:1是支持事务,2是采用行级锁。但事务的引入也带来了一些新问题,先介绍一下背景知识。

      1.1 事务及其属性ACID
        事务是同一组sql语句组成的逻辑处理单元,具有原子性,一致性,隔离性,持久性。

      1.2 并发事务处理带来的问题
        更新丢失,脏读,不可重复读,幻读。

      1.3 事务隔离级别
        由于并发事务处理带来的问题,那么解决方法就是对应不同的事务隔离级别。 数据库实现事务隔离的方式,基本上分为以下两种:
        (1)一种是在读取数据前,对其加锁,阻止其他事务对数据进行修改。
        (2)另一种是不用加任何锁,通过快照 Snapshot 形式的 “数据版本并发控制” (MultiVersion Concurrency Control)简称MVCC。
        数据库的事务隔离级别越严格,并发副作用越小,付出的代价也就越大,因为实质上就是使事务在一定程度上"串行化"进行,这与"并发"是矛盾的。

        下面是四种隔离级别:

      

      

      2. 隔离级别查看

    -- 查看事务隔离级别,默认是REPEATABLE-READ,在sql server里默认是Read Committed
    SELECT @@tx_isolation

      关于事务,事务并发问题,事务隔离级别,它们的原理这里有详细介绍“sql server 锁与事务拨云见日”。(未完)

  • 相关阅读:
    [UE4]Spline
    [UE4]Spline Mesh Actor
    SpringBoot的jar包引用外部properties文件
    如何将.crt文件转换为.cer格式
    消息队列之 RabbitMQ
    The last packet successfully received from the server was 8 milliseconds ago.
    DEBUG、INFO、WARN、ERROR、CRITICAL开发日志级别定义
    灰度发布-流程篇
    k8s+istio:流量控制之灰度发布
    微服务、SpringCloud、k8s、Istio杂谈
  • 原文地址:https://www.cnblogs.com/MrHSR/p/9355678.html
Copyright © 2011-2022 走看看