mysql锁
锁是什么?
- 锁是计算机协调多个线程或进程并发访问同一资源的机制。
- 在数据库中,数据是一种共享的资源,因此也需要保证数据并发访问的一致性和有效性。
锁的分类
从性能上来分为:
乐观锁
和悲观锁
乐观锁:每次去拿数据的时候都认为别人不会修改,所以不会上锁,但是在提交更新的时候会判断一下在此期间别人有没有去更新这个数据。
乐观锁一般通过版本比对的方式来实现的:
当读取数据时,将version字段的值一同读出,数据每更新一次,对此version值加1。
当我们提交更新的时候,判断数据库表对应记录的当前版本信息与我们第一次取出的version值进行比对,如果数据库表当前版本号与第一次取出来的version值相等,则予以更新,否则认为是过期数据。那么更新操作就会失败。
悲观锁:每次去拿数据的时候都认为别人会修改,所以每次在拿数据的时候都会上锁,这样别人想拿这个数据就会block直到它拿到锁。
从操作类型来分为:
读锁
和写锁
- 读锁:也称为共享锁,多个读操作可以同时进行,且互不影响。
- 写锁:也称为拍他锁,他可以阻断其他读操作或者写操作。
从可操作的粒度来分为:
表锁
和行锁
表锁:每次操作锁住整张表。开销小,加锁快;不会出现死锁;锁定粒度大,发生锁冲
突的概率最高,并发度最低;
行锁:每次操作锁住一行数据。开销大,加锁慢;会出现死锁;锁定粒度最小,发生锁
冲突的概率最低,并发度最高。
mysql锁
http://example.com/mysql锁与事务隔离级别/