死锁是指两个或者多个事务在同一资源上的相互占用,并请求锁定对方占用的资源,从而导致恶性循环的现象。
从两个方面理解:
1.当多个事务试图以不同的顺序锁定资源时,就可能会产生死锁。
有两个事务A与B,事务A与B同时执行sql1,则事务A会锁住记录B;事务B会锁住记录A,两条记录同时被锁住。接下来事务A执行sql2,发现记录A被事务B锁住,事务B执行sql2发现记录B被事务A锁住,陷入死循环,产生死锁。
多个事务同时锁定同一个资源时,也会产生死锁。
事务A与事务B同时操作同一条记录A,产生死锁。
上面的两个图实例假设使用的是MySQL数据库,存储引擎为innodb,行锁定。