1.事务与事务之间问题的解决还可以使用锁机制
A.乐观锁
理解:
a.事务A,在操作前,给表加了一个标记 1操作过程中,事务B,也操作了这个表,同时把1变成了2当事务A,结束操作前,发现标记不是原来的1了,放弃修改放弃操作
b.小孩吃饼干:玩之前有八块饼干,回来发现只有六块了,不吃了
c.乐观的意思时他认为很安全、乐观
d.简单理解为,本来标记东西被人动了,放弃了对这个东西得操作
B.悲观锁
理解:事务A在操作之前,把表锁起来,在此期间,只允许当事务A操作表,其他事务必须等待事务A结束后才能操作
2.读写分类
A.共享锁-针对读操作
理解:共享锁:当事务小明,操作时加了共享锁,其他事务只能读该表数据,不能修改,但是也可以加共享锁,不能加排它锁
B.排他锁-针对写操作
理解:当事务A给表加了排他锁之后,其他事务只能等待该事务的结束才能继续操作。事务A在此期间可以读写表内容
注意:
a.如果时读取数据,但是不允许其他事务修改数据时,可以使用共享锁
b.如果是写数据,而且不允许其他事务操作当前表数据,那么可以使用排他锁
3.锁的粒度
A. 表锁
a.将整张表都锁起来
b.开销小,加锁快,不会出现死锁。锁的粒度最大,适合查询为主的,只有少量按索引条件更新数据的操作。
c.开销小,粒度最大。
d.缺点时资源争用概率高
B.行锁
a.开销大,加锁慢,会出现死锁。锁的粒度最小,适合大量按索引条件并发更新少量不同数据,同时又有并发查询的操作。
b.使用行级锁定的主要时InnoDB存储引擎
c.范围越小越麻烦越慢开销越大
d.开销大,粒度小
C.页面锁
注意:锁的粒度可以理解为锁的范围