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锁”