• 十七、mysql 分区之 锁问题


    1.演示一个表锁,基于myisam
        CMD 1                                                   CMD2
        create table e1 (id int ,name char(20)); 
        lock table e1 read;
        [select|insert|update|delete]..                         select * from e1; //此时,这个操作将被挂起,等待e1被解锁
        unlock table;
      
    2.表读锁:
        1.被锁定的进程跟没有被锁的都可以访问这个表
        2.但被锁的进程在未解锁之前只允许读取本表,而且不能进行增删改操作。
        2.未解锁之前,其他进行可以读取本表,也允许读取其他表,但是不能操对这个表进行更新操作
    
    3.如果sql中给表设置了别名,如果要对这个表进行枷锁,那么别名也需要被枷锁、
    
    4.共享锁:
        实例:select * from emp where id = 1 lock in share mode;
    
    4.排他锁:
        实例:select * from emp where id = 1 for update;
        1.在没有索引的情况下,innodb会进行表锁,也就是说行锁是要建立在有索引的基础下;
        2.如果有索引的情况下,如果2个进程使用的是同一个索引,也会造成锁等待的情况,否则使用的是不同索引,则不会造成死锁情况
        
    5.Next-Key锁
        1.当where条件为范围(in、or <=)等,innodb会给符合条件的索引项加锁;如果在范围内,但是不存在的数据行,innodb会给这些不存在的记录加上“Next-Key锁”
  • 相关阅读:
    构建布局良好的Windows程序
    新认知之WinForm窗体程序
    分组查询之牛刀小试!
    Azure虚拟机时间同步问题
    关闭同一网络内的windows主机
    关于jdbc和数据库连接池的关系(不是封装的关系)
    spring,springMVC的优点和区别
    从新向你学习javase(第一天)
    spring包
    事物
  • 原文地址:https://www.cnblogs.com/shibazi/p/3839594.html
Copyright © 2020-2023  润新知