一.概述

  在数据库中,数据是属于共享资源,为了保证并发访问的一致性,有效性,产生了锁。接下来重点讨论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 锁问题(事务与隔离级别介绍)的更多相关文章

  1. mysql 开发进阶篇系列 10 锁问题 (相同索引键值或同一行或间隙锁的冲突)

    1.使用相同索引键值的冲突 由于mysql 的行锁是针对索引加的锁,不是针对记录加的锁,所以虽然是访问不同行的记录,但如果是使用相同的索引键,是会出现锁冲突的.设计时要注意 例如:city表city_ ...

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

    一. 概述 通常来说,死锁都是应用设计问题,通过调整业务流程,数据库对象设计,事务大小,以及访问数据库的sql语句,绝大部分死锁都可以避免,下面介绍几种避免死锁的常用 方法. 1. 在应用中,如果不同 ...

  3. mysql 开发进阶篇系列 15 锁问题 (总结)

    1. innodb 行锁是基于索引实现的,如果不通过索引访问数据,innodb会使用表锁. http://www.cnblogs.com/MrHSR/p/9376086.html 2. Innodb ...

  4. mysql 开发进阶篇系列 13 锁问题(关于表锁,死锁示例,锁等待设置)

    一. 什么时候使用表锁 对于INNODB表,在绝大部分情况下都应该使用行锁.在个别特殊事务中,可以考虑使用表锁(建议). 1. 事务需要更新大部份或全部数据,表又比较大,默认的行锁不仅使这个事务执行效 ...

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

    1. innodb在不同隔离级别下的一致性读及锁的差异 不同的隔离级别下,innodb处理sql 时采用的一致性读策略和需要的锁是不同的,同时,数据恢复和复制机制的特点,也对一些sql的一致性读策略和 ...

  6. mysql 开发进阶篇系列 7 锁问题(innodb锁争用情况及锁模式)

    1 .获取innodb行锁争用情况 1.1 通过检查innodb_row_lock状态变量来分析系统上的行锁的争夺情况 SHOW STATUS LIKE 'innodb_row_lock%' 通过in ...

  7. mysql 开发进阶篇系列 11 锁问题 (恢复和复制的需要,对锁机制的影响)

    1. 恢复和复制的需要,对innodb锁机制的影响 mysql 通过binlog文件对增删除改等更新数据的sql语句,实现数据库的恢复和主从复制.mysql的恢复机制(复制其实就是在slave mys ...

  8. mysql 开发进阶篇系列 9 锁问题 (Innodb 行锁实现方式)

    一.概述 Innodb 行锁是通过给索引上的索引项加锁来实现的.这一点与(oracle,sql server)不同后者是通过在数据块中对相应的数据行加锁.这意味着只有通过索引条件检索数据,innodb ...

  9. mysql 开发进阶篇系列 8 锁问题 (共享锁与排它锁演示)

    1 .innodb 共享锁(lock in share mode)演示 会话1 会话2 SET autocommit=0; SELECT cityname FROM  city WHERE city_ ...

随机推荐

  1. Python+Selenium 利用ID,XPath,tag name,link text,partial link text,class name,css,name定位元素

    使用firefox浏览器,查看页面元素,我们以“百度网页”为示例 一.ID定位元素    利用find_element_by_id()方法来定位网页元素对象 ①.定位百度首页,输入框的元素 ②.编写示 ...

  2. maven的介绍及如何获取jar包

    本文转载自   https://www.cnblogs.com/whgk/p/7112560.html 该篇文章篇幅较长,大概的思路如下 maven的介绍,初步认识,获取jar包的三个关键属性 --& ...

  3. Struts2内建拦截器

    params拦截器 负责将请求参数设置为Action属性 staticParams拦截器 将配置文件中action元素的子元素param参数设置为Action属性 servletConfig拦截器 将 ...

  4. gitlab的安装和基本使用

    一.gitlab的安装 1)安装依赖包 sudo yum install git vim gcc glibc-statc telnet -y sudo yum install -y curl poli ...

  5. 使用mybatis plus 操作数据库

    mybatis plus 是基于mybatis 的一个增强包,比 mybatis 更加容易使用. 特点: 1.分页支持 2.支持自定义查询. 3.简单的情况下,不需要写map.xml 文件 4.支持租 ...

  6. CentOS 7 rpm安装jdk

    RPM 安装jdk1.8.0_111 ,查询系统自带的jdk rpm -qa | grep java 查询结果如下: [root@bogon ~]# rpm -qa | grep java javap ...

  7. mysql thread pool

    转自:http://blog.csdn.net/wyzxg/article/details/8258033 mysql 线程处理流程图: Mysql支持单线程和多线程两种连接线程模式,如果单线程,则在 ...

  8. 实现ueditor的自动上传word中的……

    UEditor的配置和使用(单独图片与文件上传) Word图片上传控件发布-Xproer.WordPaster ueditor 图片粘贴上传,实现图文粘贴,图片自动上传 打开工程: 文档的上传. 运行 ...

  9. CSS3变换、过渡、动画效果

    为元素创建圆角 1.四个相同的圆角 -webkit-border-radius:10px; border-radius:10px; 2.一个圆角 -webkit-border-top-left-rad ...

  10. vb越界

    想起来一个项目当中,遇到了一个问题,就是老是显示数据溢出. 后来查查查,发现是由于vb的特性造成的.例如cbyte()函数.此函数()里面的数据运算也不能超过cbyte的范围,不然就回发生溢出问题.