一、一篇文章让你搞懂mysql的三种锁
前言
锁的重要性想必不用多说了吧,作为面试造火箭中最重要的一个点之一,可谓是不得不会,说出来都是一把辛酸泪,什么悲观锁,乐观锁,自旋锁,偏向锁等等等等,虽然说在我们平常写代码的时候很少会用到它们,但是实现的思想是很需要我们去研究的。
之前和大家聊过分布式锁的实现方式以及其解决的问题。
那么今天moon就和大家聊聊mysql中的锁,读完这篇文章你将会学到:
全局锁
全局锁就是说对整个数据库进行加锁。
具体加锁的方式可以用以下代码:
flushtableswithreadlock(FTWRL)
这行命令的意义就是让数据库变为只能读数据,不能写数据。
一些表的增删改语句,建表改表语句,包括更新相关的事务提交语句,全部都会被阻塞。
没错,就是在我们做数据库的全量备份时会用到,但是在我们使用全局锁的时候却会有很多问题:
说到这里大家可能都明白了,全剧锁典型的是请我们在进行全局备份的时候会用到,但是使用全局锁可能会出现一些问题:
●如果使用全局锁对主数据库备份,因为我们数据库是读写分离的,只有主数据库可以读数据,那么就相当于在开启全局锁的期间,整个数据库都无法写数据。
●如果使用全局锁对从数据库备份,会导致