• linkedu视频
  • 平面设计
  • 电脑入门
  • 操作系统
  • 办公应用
  • 电脑硬件
  • 动画设计
  • 3D设计
  • 网页设计
  • CAD设计
  • 影音处理
  • 数据库
  • 程序设计
  • 认证考试
  • 信息管理
  • 信息安全
菜单
linkedu.com
  • 网页制作
  • 数据库
  • 程序设计
  • 操作系统
  • CMS教程
  • 游戏攻略
  • 脚本语言
  • 平面设计
  • 软件教程
  • 网络安全
  • 电脑知识
  • 服务器
  • 视频教程
  • MsSql
  • Mysql
  • oracle
  • MariaDB
  • DB2
  • SQLite
  • PostgreSQL
  • MongoDB
  • Redis
  • Access
  • 数据库其它
  • sybase
  • HBase
您的位置:首页 > 数据库 >Mysql > Mysql-各种锁区分与MVCC的详解

Mysql-各种锁区分与MVCC的详解

作者:匿名 字体:[增加 减小] 来源:互联网 时间:2018-12-05

匿名通过本文主要向大家介绍了Mysql,锁区分,MVCC等相关知识,希望本文的分享对您有所帮助

mysql的锁貌似有很多啊,查了大部分资料,

什么表锁,行锁,页锁

共享锁,排他锁,意向锁,读锁,写锁

悲观锁,乐观锁。。

我去,真想问一句,有没有 金锁?我还范冰冰呢。。。

哎呀怎么感觉好乱啊。那么把它好好整理总结下吧。

后边还有对在innodb下的mvcc理解与举例,在并发量的访问下如何保持高效一致?简单易懂了解下,听朋友说大公司面试也爱问这个。

表/行/页-锁:

表级锁(table-level locking):MyISAM和MEMORY存储引擎

行级锁(row-level locking) :InnoDB存储引擎

页面锁(page-level-locking):BDB存储引擎


表级锁:开销小,并发低,加锁快;不会出现死锁;锁定粒度大,发生锁冲突的概率最高,并发度也最低。

行级锁:开销大,并发高,加锁慢;会出现死锁;锁定粒度最小,发生锁冲突的概率最低,并发度也最高。

页面锁:开销和加锁时间界于表锁和行锁之间;会出现死锁;锁定粒度界于表锁和行锁之间,并发度一般。

共享/排他锁

共享锁又称读锁,是读取操作创建的锁。其他用户可以并发读取数据,但任何事务都不能对数据进行修改(获取数据上的排他锁),直到已释放所有共享锁。

排他锁又称写锁,如果事务T对数据A加上排他锁后,则其他事务不能再对A加任任何类型的封锁。获准排他锁的事务既能读数据,又能修改数据。

Mysiam锁模式

MyISAM在执行查询语句(SELECT)前,会自动给涉及的所有表加读锁,在执行更新操作(UPDATE、DELETE、INSERT等)前,会自动给涉及的表加写锁。

a、对MyISAM表的读操作(加读锁),不会阻塞其他进程对同一表的读请求,但会阻塞对同一表的写请求.只有当读锁释放后才会执行其它进程的写操作。

b、对MyISAM表的写操作(加写锁),会阻塞其他进程对同一表的读和写操作,只有当写锁释放后,才会执行其它进程的读写操作。


innodb锁模式

意向锁是InnoDB自动加的,不需要用户干预。

对于insert、update、delete,InnoDB会自动给涉及的数据加排他锁(X);对于一般的Select语句,InnoDB不会加任何锁,事务可以通过以下语句给显示加共享锁或排他锁。

共享锁: SELECT ... LOCK IN SHARE MODE;

排他锁: SELECT ... FOR UPDATE;

MVCC(Multiversion concurrency control)

一个很难懂得概念,查阅了很多资料与博客,下边做一个简单易懂的理解。

情景模拟:

在高并发的前提下,一定要注意这个前提。

事务L1修改某表中D的key值,还未提交;

事务L2同样也修改D的key值,提交;然后L1提交。

发生了什么?

L1从D读取key:123对应的值100

L2从D读取key:123对应的100

分享到:QQ空间新浪微博腾讯微博微信百度贴吧QQ好友复制网址打印

您可能想查找下面的文章:

  • 分享下mysql各个主要版本之间的差异
  • MySQL essential版本和普通版本有什么区别?
  • redhat 5.4下安装MYSQL全过程
  • 如何用SQL命令查看Mysql数据库大小
  • 解析mysql中如何获得数据库的大小
  • 解析mysql修改为utf8后仍然有乱码的问题
  • 5个常用的MySQL数据库管理工具详细介绍
  • 解析在MySQL里创建外键时ERROR 1005的解决办法
  • 解析远程连接管理其他机器上的MYSQL数据库
  • mysql 精简过程(删除一些文件)

相关文章

  • 2018-12-05mysql 5.6.17 绿色版(免安装)安装配置教程_MySQL
  • 2017-05-11mysql 一次更新(update)多条记录的思路
  • 2018-12-05mysql下为数据库设置交叉权限的方法实例详解
  • 2018-12-05mysql的bug测试--针对高并发进行测试
  • 2018-12-05分页 SQLServer存储过程
  • 2018-12-05MySQL Cluster集群配置方案
  • 2018-12-05SQLServer 2008中的代码安全(七) 证书加密
  • 2017-05-11MySQL安全配置向导mysql_secure_installation详解
  • 2017-05-11mysqlsla慢查询分析工具使用笔记
  • 2018-12-05关于数值运算符的相关文章推荐

文章分类

  • MsSql
  • Mysql
  • oracle
  • MariaDB
  • DB2
  • SQLite
  • PostgreSQL
  • MongoDB
  • Redis
  • Access
  • 数据库其它
  • sybase
  • HBase

最近更新的内容

    • MYSQL使用inner join 进行 查询/删除/修改示例
    • Oracle不同数据库间对比分析脚本
    • php获取数据库结果集实例详解
    • 学会sql数据库关系图(Petshop)
    • 数据存储-php及数据库存储出现问题
    • linux系统用户管理与grep正则表达式详解
    • [教程]MongoDB 从入门到进阶 (概要 以及 高级索引篇 TimeToLive
    • CentOS7下安装MySQL5.7步骤(图文)
    • mysql心得分享:存储过程
    • MYSQL 没有完全卸载将导致其安装不成功

关于我们 - 联系我们 - 免责声明 - 网站地图

©2020-2025 All Rights Reserved. linkedu.com 版权所有