锁
锁机制:数据库为了保证数据的一致性,在共享的资源被并发访问时变得安全所设计的一种规则。
锁机制类似多线程中的同步,作用就是可以保证数据的一致性和安全性。
按操作分类
共享锁:也叫读锁。针对同一份数据,多个事务读取操作可以同时加锁而不互相影响, 但是不能修改数据。
排他锁:也叫写锁。当前的操作没有完成前,会阻断其他操作的读取和写入。
按粒度分类
表级锁:会锁定整个表。开销小,加锁快。锁定力度大,发生锁冲突概率高,并发度低。不会出现死锁情况。
行级锁:会锁定当前行。开销大,加锁慢。锁定粒度小,发生锁冲突概率低,并发度高。会出现死锁情况。
按使用方式分类
悲观锁:每次查询数据时都认为别人会修改,很悲观,所以查询时加锁。
乐观锁:每次查询数据时都认为别人不会修改,很乐观,但是更新时会判断-下在此期间别人有没有去更新这个数据。
InnoDB共享锁
采用带有索引的列进行加锁,加的是行锁,如果是不带索引的列,就会提升为一个表锁
共享锁和共享锁是兼容的
数据可以被多个事务查询,但是不能进行修改数据
InnoDB排他锁
普通查询没问题,只要是加锁查询就有问题了
排他锁和共享锁不兼容
排他锁和排他锁不兼容
MyISAM读锁
要想让修改操作成功,必须解锁,而不是上面两种只要commit就可以了
MyISAM读锁
要想其他连接操作成功,也是必须解锁
悲观锁和乐观锁
了解