shibazi

  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理
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锁”

 

posted on 2014-07-12 07:50  一生学习,何来毕业  阅读(383)  评论(0编辑  收藏  举报