🔥码云GVP开源项目 12k star Uniapp+ElementUI 功能强大 支持多语言、二开方便! 广告
``` 1、表锁和行锁 表锁和行锁锁的粒度不一样,表锁锁住的是一整张表,行锁锁住的是表中的一行数据,行锁是开销最大的锁策略,表锁是开销最小的锁策略。 InnoDB使用的是行级锁,MyISAM使用的是表级锁。 注意:在InnoDB中,例如模糊查询select \* from tb where name like 'lin%'的时候也会锁住一整张表。 2、共享锁和排他锁 共享锁又称读锁(S锁),一个事务获取了共享锁,其他事务可以获取共享锁,不能获取排他锁,其他事务可以进行读操作,不能进行写操作。 排他锁又称写锁(X锁),如果事务T对数据A加上排他锁后,则其他事务不能再对A加任任何类型的封锁。获准排他锁的事务既能读数据,又能修改数据。 对于insert、update、delete,InnoDB会自动给涉及的数据加排他锁(X); 对于一般的Select语句,InnoDB不会加任何锁,事务可以通过以下语句给显示加共享锁或排他锁。 共享锁:SELECT ... LOCK IN SHARE MODE; 排他锁:SELECT ... FOR UPDATE; 共享锁:一个记录可以加很多共享锁,但是不能加了排它锁了,数据也只能查看,不能修改 排它锁:一个记录只能加一个排它锁,加上后不允许加其他的共享锁和排它锁,可以修改和查询数据。 ```