mysql数据库锁
mysql数据库一般分为两类:悲观锁和乐观锁。
悲观锁
悲观锁是我们常说的数据库锁机制。
悲观锁按照适用性质划分
悲观锁按照使用性质划分为共享锁和排它锁。
共享锁
共享锁又称读锁,当事务为某几行上读锁时,允许其他事务只可以针对这几行进行读操作,不允许其他事务给这几行上排它锁,但是允许上读锁。
上共享锁的写法:lock in share mode
eg:select match from 表 where metch > 60 lock in share dode;
排它锁
排它锁又称写锁,当一个事务对某几行上写锁时,不允许其他事务针对这几行进行写操作,但是允许读操作,更不允许其他事务给这几行上任何所,包括写锁。
上排它锁的写法:for update
eg:select match from 表 where mecth > 60 for update;
悲观锁按照作用范围划分
行锁
行锁即锁的作用是行级别,数据库能够不确定那些行需要锁的情况下使用行锁,如果不知道影响那些行的时候就会使用表锁。
表锁
锁的作用范围是整张表
乐观锁
一般是用户自己实现的锁机制。
总结
在mysql的InnoDB引擎中支持行锁,mysql的行锁是通过索引加载的,也就是行锁是加载索引响应的行上的,要是对应的sql没有走索引,则会全表扫描。
注意的地方:
1、行锁必须有索引才能实现,否则会自动锁住全表,那将不会是行锁;
2、两个事物不能锁同一个索引;
3、insert、delete、update在事物中会自动默认加上排它锁。