mysql 开发进阶篇系列 6 锁问题

Posted 花阴偷移

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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 锁与事务拨云见日”。(未完)

 

以上是关于mysql 开发进阶篇系列 6 锁问题的主要内容,如果未能解决你的问题,请参考以下文章

mysql 开发进阶篇系列 14 锁问题(避免死锁,死锁查看分析)

mysql 开发进阶篇系列 12 锁问题(隔离级别下锁的差异)

mysql 开发进阶篇系列 20 MySQL Server(innodb_lock_wait_timeout,innodb_support_xa,innodb _log_*)

mysql 开发进阶篇系列 55 权限与安全(安全事项 )

Python进阶篇:MySQL隔离级别详解

Python进阶篇:MySQL隔离级别详解