zoukankan      html  css  js  c++  java
  • mysql的锁原理

    myisam:
    只有表锁,分为表共享读锁,表排他写锁。不支持事务
    表共享读锁:session1:lock table a read ; 此session1能对只能对a表读,其他都干不了,其他的session能对这个表读。直到unlock tables;
    表排他锁:session1:lock table a write; 此session1能对a表进行update,insert,select,delete; 其他的session对这个表什么都干不了;
    myisam在执行查询语句(SELECT)前,会自动给涉及的所有表加读锁,在执行更新操作 (UPDATE、DELETE、INSERT等)前,会自动给涉及的表加写锁,这个过程并不需要用户干预,因此,用户一般不需要直接用LOCK TABLE命令给MyISAM表显式加锁。
    LOCK TABLE时加了“local”选项,其作用就是在满足MyISAM表并发插入条件的情况下,允许其他用户在表尾并发插入记录并非插入(lock table a read local的时候):
    当concurrent_insert设置为0时,不允许并发插入。
    当concurrent_insert设置为1时,如果MyISAM表中没有空洞(即表的中间没有被删除的行),MyISAM允许在一个进程读表的同时,另一个进程从表尾插入记录。这也是MySQL的默认设置。
    当concurrent_insert设置为2时,无论MyISAM表中有没有空洞,都允许在表尾并发插入记录。
    myisam:读锁和写锁是串行的,总是写锁先获得资源。就算是读锁先排队的,写锁后排队的,一样时写锁获得资源
    
    innodb:支持事务,有表锁,行锁 
    行锁:排他锁,共享锁
    共享锁:又称读锁。允许一个事务去读一行,阻止其他事务获得相同数据集的排他锁。session1对数据a加了共享锁,session1只能对a读不能更改,其他session也只能对a加共享锁去读,不能加排他锁。
    排他锁:又称写锁。排他锁指的是一个事务在一行数据加上排他锁后,其他事务不能再在其上加其他的锁。session1对a加了排他锁,session1能对a更改,其他session不能再对a加任何的锁。但是因为select默认不加任何锁,所以可以select
    InnoDB引擎默认的修改数据语句:update,delete,insert都会自动给涉及到的数据加上排他锁,select语句默认不会加任何锁类型,如果加排他锁可以使用select …for update语句,加共享锁可以使用select … lock in share mode语句。
    

      

  • 相关阅读:
    hdu 2001 计算两点的距离
    hdu 2001 计算两点的距离
    hdu 2000 ASCII码排序(c语言)
    hdu 2000 ASCII码排序(c语言)
    1.网页学习-开始学习第一步:
    .net 父窗口线程交给子窗口
    多线程传递多个参数
    not Exists的使用方法
    xml.dom.minidom介绍
    .net之线程控件之间访问
  • 原文地址:https://www.cnblogs.com/xin-jun/p/10824389.html
Copyright © 2011-2022 走看看