1、多个线程同时修改数据,存在数据不一致的情况,也就是并发控制的问题。
2、mysql提供读锁和写锁,读锁之上可以再加读锁,不能加写锁,而写锁之上不能加任何锁。也就是说,读锁是共享的,写锁是排他的。
3、锁粒度,为了更好的并发控制,锁的粒度应该尽可能小,也就是只锁定修改的数据。但是,锁本身也有一定的开销,包括获取锁,检查锁是否释放,释放锁,这些操作也耗费一定的资源。锁的粒度小,在并发控制的时候,也就意味着需要更多的锁,锁的总开销也就越大。
4、根据锁的粒度,分为表锁和行锁,mysql本身使用表锁来实现不同的目的,比如alter table,这个时候会忽略存储引擎的锁机制。存储引擎支持表锁和行锁,不同存储引擎的实现不同。
5、特别注意:mysql支持不同的事务隔离级别,隔离级别越高,锁的粒度越大,也就是锁的内容越多。比如:
考虑下面的情况,A,B客户端的事务隔离级别都是read-uncommitted, 锁的粒度是行锁。
步骤一、A执行start transaction,修改一条记录
步骤二、B执行start transaction,修改另一条记录
二者是不阻塞的,证明read-uncommitted 是行锁。同理,可以证明read-committed是行锁,repeatable-read和serializable是表锁。

注意:加什么锁,锁多大范围,和很多因素有关,包括是否有索引,执行的操作等。比如上面的情况,A、B都是repeatable-read,A进行select,B进行update不阻塞。但是A进行update,B进行update就会阻塞。

6、死锁,mysql在事务中,InnoDB会根据事务隔离级别自动锁定,而释放实在事务commit或者rollback的时候才释放。这就会存在死锁的情况,考虑下面的情况:
A,B客户端的事务隔离级别都是read-uncommitted, 锁的粒度是行锁。
步骤一、A执行start transaction,修改记录1
步骤二、B执行start transaction,修改记录2
步骤三、A修改记录2
步骤四、B修改记录1
出现死锁,不过mysql功能很强大,可以检测出这种死锁,B修改记录1的时候报错 ERROR 1213 (40001): Deadlock found when trying to get lock; try restarting trans
action

mysql 并发控制的更多相关文章

  1. 五分钟详解MySQL并发控制及事务原理

    在如今互联网业务中使用范围最广的数据库无疑还是关系型数据库MySQL,之所以用"还是"这个词,是因为最近几年国内数据库领域也取得了一些长足进步,例如以TIDB.OceanBase等 ...

  2. mysql并发控制之快照读和当前读

    上一篇简单的介绍了下MVCC(多版本并发控制)的原理,MVCC会对事物内操作的数据做多版本控制,从而实现并发环境下事物对数据写操作的阻塞不影响读操作的性能.而这个多版本控制的实现是由undo log来 ...

  3. mysql并发控制之MVCC

    1.MVCC(Multiversion concurrency control) :多版本并发控制,当我们并发访问数据库(读或写)时,对事物内正在处理的数据做多版本控制,用以防止写操作的阻塞影响读操作 ...

  4. MySQL并发控制

    并发即指在同一时刻,多个操作并行执行.MySQL对并发的处理主要应用了两种机制——是“锁”和“多版本控制”. 锁 锁分为读锁和写锁两种,也称作共享锁和排他锁.因为多个读操作同时进行是不会破坏数据的,所 ...

  5. MySQL——并发控制(锁)

    核心知识点: 1.表锁和行级锁代表着锁的级别:读锁和写锁代表锁定真实类型. 2.读锁属于共享锁,共享同一资源,互不干扰:写锁属于排他锁,为了安全起见,写锁会阻塞其他的读锁和写锁. 3.表锁的开销最小, ...

  6. mysql并发控制之数据库锁

    1.mysql和redis的区别 mysql是一种关系型数据库,数据会最终存储在磁盘上.而redis是一种非关系型的nosql数据库,以key-value的形式存储数据,将数据存储在内存.从性能上来说 ...

  7. mysql—并发控制及事务

    并发控制 实现的并发访问的控制技术是基于锁: 锁分为表级锁和行级锁,MyISAM存储引擎不支持行级锁:InnoDB支持表级锁和行级锁: 锁的分类有读锁和写锁,读锁也被称为共享锁,加读锁的时候其他的人可 ...

  8. 深入理解MySQL的并发控制、锁和事务【转】

    本文主要是针对MySQL/InnoDB的并发控制和加锁技术做一个比较深入的剖析,并且对其中涉及到的重要的概念,如多版本并发控制(MVCC),脏读(dirty read),幻读(phantom read ...

  9. 深入理解Mysql——锁、事务与并发控制

    本文对锁.事务.并发控制做一个总结,看了网上很多文章,描述非常不准确.如有与您观点不一致,欢迎有理有据的拍砖! mysql服务器逻辑架构 每个连接都会在mysql服务端产生一个线程(内部通过线程池管理 ...

随机推荐

  1. HDU 5787:K-wolf Number(数位DP)

    题目链接:http://acm.split.hdu.edu.cn/showproblem.php?pid=5787 题意:要求相邻的K个位的数不能相同,在[L,R]区间有多少个这样的数. #inclu ...

  2. mysql5.5.x升级到mysql5.6.x

    大概步骤是: 把配置文件添加:skip-grant-tables参数,把basedir升级成新版本,启动mysql,执行命令:mysql_upgrade升级一下字典信息,然后flush privile ...

  3. RadioGroup+Fragment 使用Fragment的add()方法,防止使用replace每次都重新加载页面,造成资源浪费

    radiogroup+fragment是很常用的主页导航控件,之前为了代码简便一直使用的replace()替换fragment,代码如下: getSupportFragmentManager().be ...

  4. API判断网站IP地址,国家区域

    直接访问http://api.wipmania.com/jsonp 还有经纬度

  5. 第十二届浙江省大学生程序设计大赛-May Day Holiday 分类: 比赛 2015-06-26 14:33 10人阅读 评论(0) 收藏

    May Day Holiday Time Limit: 2 Seconds Memory Limit: 65536 KB As a university advocating self-learnin ...

  6. 用户 NT AUTHORITY\NETWORK SERVICE 登录失败

    Windows server 2003,2008 Web.Config 配置连接sql 使用 win身份验证时: 当连接sql server使用信任连接(参看Web.Config文件)时就会出这个错误 ...

  7. 只用css来美化的上传表单按钮(抄的迅雷的)

    <!DOCTYPE html><html><head><meta charset="utf-8" /><title>文件 ...

  8. V-rep学习笔记:曲柄摇杆机构

    在ADAMS中创建一个曲柄摇杆机构很方便,但是V-rep中建模就比较麻烦.下面将自己在V-rep中建立曲柄摇杆机构模型的过程记录下来(由于对V-rep不是很熟,可能会有一些错误,只能等以后发现了再改进 ...

  9. windows tomcat 优化

    windows tomcat 优化 1.  tomcat conf server.xml 在server.xml中修改以一部分,增加节点数目,可以很好的提高性能: <Connector port ...

  10. linux Chrome 安装

    1.wget 32bits: wget https://dl.google.com/linux/direct/google-chrome-stable_current_i386.deb 64bits: ...