MySQL锁

1、死锁指的是两个或多个事务相互占用资源,都请求锁定对方占用的资源,这样导致恶性循环。

比如:

事务1:

   start transaction; 

  update tablename set pub=1 where id=1;

  update tablename set pub=1 where id=2;

  commit

事务2:

  start transaction; 

  update tablename set pub=1 where id=2;

  update tablename set pub=1 where id=1;

  commit

如果恰巧这两个事务都锁定了第一条语句,都要请求对方占用的资源,这样就陷入了死循环。

MySQL针对这种情况,制定了一种策略:将持有最小行即排它锁的事务进行回滚。

 

2、InnoDB

InnoDB默认是行锁的, 但行级锁都是基于索引的,如果一条SQL语句用不到索引是不会使用行级锁的,会使用表级锁把整张表锁住。

 

 

--------EOF---------
本文微信分享/扫码阅读