• 表锁简介


    锁分为表锁和行锁:

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

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

    不同的存储引擎支持的锁粒度不一样。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存储引擎是不支持这个的。
    欢迎批评指正,提出问题,谢谢!
  • 相关阅读:
    ASP.NET MVC 几种 Filter 的执行过程源码解析
    C#中的线程二(BeginInvoke和Invoke)
    C#中的线程一(委托中的异步)
    C#比较dynamic和Dictionary性能
    C#微信公众平台开发—高级群发接口
    js 关闭浏览器
    切图神器 --- Assistor
    切图 -- cutterman
    mac上用teamviewer远程windows输入问题
    A quick introduction to HTML
  • 原文地址:https://www.cnblogs.com/xxeleanor/p/14369489.html
Copyright © 2020-2023  润新知