zoukankan      html  css  js  c++  java
  • 表锁简介

    锁分为表锁和行锁:

    表锁开销小,加锁快;不会出现死锁;锁定力度大,发生锁冲突概率高,并发度低。

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

    不同的存储引擎支持的锁粒度不一样。InnoDB行锁和表锁都支持,MyISAM只支持表锁。InnoDB只有通过索引条件检索数据才使用行级锁,否则,InnoDB将使用表锁。InnoDB的行锁是基于索引的。

    表锁的模式:表读锁(table Read Lock)、表写锁(table WriteLock)

    请求锁模式是否兼容当前锁模式

    None

    读锁

    写锁

    读锁

    写锁

    在表读锁和表写锁的环境下:读读不阻塞,读写阻塞,写写阻塞。

    • 读读不阻塞:当前用户在读数据,其他用户也在读数据,不会加锁。
    • 读写阻塞:当前用户在读数据,其他用户不能修改当前用户读的数据,会加锁。
    • 写写阻塞:当前用户在修改数据,其他的用户不能修改当前用户正在修改的数据,会加锁。

    读锁和写锁是互斥的,读写操作是串行。如果某个进程想要获取读锁,同时另一个经常想要获取写锁,MySQL中写锁是优先于读锁的。

    写锁和读锁的优先级可以通过参数调节的:max_write_lock_count和low_priority_update。需要注意:

    • LOCAL修饰符允许其他会话在持有锁时执行非冲突的插入语句(并发插入)。但是如果打算在持有锁时使用服务器外部的进程操作数据库,则不能使用READ LOCAL。对于InnoDB表,READ LOCAL和READ是一样的。
    • MyISAM可以支持查询和插入操作的并发进行,可以通过系统变量concurrent_insert来指定哪种模式,在MyISAM中它默认是:如果MySIAM表中没有空洞(表中没有被删除的行),MySIAM允许在一个进程读表的同时,另一个进程从表尾插入记录。InnoDB存储引擎是不支持这个的。
    欢迎批评指正,提出问题,谢谢!
  • 相关阅读:
    Android Studio “Project Structure”选项目录结构显示异常
    Android 不通过USB数据线调试的方法
    Android OpenGL ES 开发教程 从入门到精通
    Android NIO(Noblocking I/O非阻塞I/O)小结
    phpStudy3——往数据库中添加数据
    phpStudy2——PHP脚本访问MySql数据库
    phpStudy1——PHP文件获取html提交的参数
    php页面的基本语法
    安装使用phpStudy在本机配置php运行环境
    运行php网站需要安装什么
  • 原文地址:https://www.cnblogs.com/xxeleanor/p/14369489.html
Copyright © 2011-2022 走看看