数据库锁(行锁,表锁,共享锁,排他锁)
行锁
我们知道mysql的Innodb引擎是支持行锁的,与Oracle不同,mysql的行锁是通过索引加载的,即行锁是加载索引响应的行上的,要是对应的SQL语句没有索引,则会走表锁。
行锁无法实现,取而代之就是表锁。
行锁特点:
1.行锁必须有索引才能实现,否则会自动锁全表,那么就不是行锁了。
2.两个事务不能锁同一个索引。
3.锁冲突概率低,并发性高,但是会有死锁的情况出现。
表锁
顾名思义,表锁就是一锁锁一整张表,在表被锁定期间,其他事务不能对该表进行操作,必须等当前表的锁被释放后才能进行操作。表锁响应的是非索引字段,即全表扫描,全表扫描时锁定整张表,sql语句可以通过执行计划看出扫描了多少条记录。
表锁特点:
1.表锁:不会出现死锁,发生锁冲突几率高,并发低。
2.不根据主键查询,而是查询所有的记录,MySQL就对整张表加锁
排它锁(记为X锁)
排它锁又称为写锁。若事务T 对数据对象A