锁
本地测试的环境:InnoDB 存储引擎;数据库隔离级别:repeatable read;
为什么需要锁呢?
并发下,多个事务对同一个数据进行修改,需要通过锁来保证事务的隔离性和一致性。
数据库锁分类

1、共享锁、排他锁(从数据库管理的角度对锁进行划分)
共享锁 share lock
读取操作创建的锁。其他用户可以并发读取数据,但任何事务都不能对数据进行修改(获取数据上的排他锁),直到已释放所有共享锁。
如果事务T对数据A加上共享锁后,则其他事务只能对A再加共享锁,不能加排他锁。获准共享锁的事务只能读数据,不能修改数据。
select ... lock in share mode;
排他锁 exclusive lock
如果事务T对数据A加上排他锁后,则其他事务不能再对A加任何类型的封锁。获准排他锁的事务既能读数据,又能修改数据。
select ... for update;
意向锁
意向锁是表级锁,其设计目的主要是为了在一个事务中揭示下一行将要被请求锁的类型。InnoDB中的两个表锁:
意向共享锁(IS):表示事务准备给数据行加入共享锁,也就是说一个数据行加共享锁前必须先取得该表的IS锁
意向排他锁(IX):类似上面,表示事务准备给数据行加入排他锁,说明事务在一个数据行加排他锁前必须先取得该表的IX锁。