1.共享锁和排它锁
共享锁(shared lock): 又叫读锁,一个事务获取了一行的共享锁后,其它事务可以再获取这一行的共享锁,不能获取这行的排它锁
加锁: select * from tb_student where id = 1 lock in share mode
释放: commit / rollback
排它锁(excusive lock): 又叫写锁,一个事务获取了一行的排它锁后,其它事务不能再获取这一行的共享锁和排它锁
加锁: select * from tb_student where id = 1 for update
2.表锁和意向锁
innodb支持表锁和行锁
加表锁: lock table [tableName] [read | write]
释放表锁: unlock table
表锁和行锁存在冲突,比如:
1. transactionA获取了tableA中某一行的共享锁,其它事务就不能再修改这行数据了
2. trsactionB如果获取了tableA的表级排它锁,就可以对tableA的所有数据修改
这里 transactionB的表锁和transactionA的行锁就是冲突的
意向锁就是为了解决行锁和表锁的冲突,意向锁本身也是表级别的锁,事务在获取行锁前,必须先获取相应的意向锁,意向锁相当于一个标记&