MySQL的小知识点(三)

113 阅读2分钟

「这是我参与2022首次更文挑战的第18天,活动详情查看:2022首次更文挑战image.png 数据库,当然是用来存储数据的,提供给我们curd的功能。简单的curd功能,MySQL可能不需要为我们做很多保障,但是在并发的情况下,MySQL就不得不为我们提供更加细粒度的控制。

并发控制

网站肯定拿来访问的,访问的过程中难免会有修改到同一条数据的情况,如果不加以控制,就会导致各种奇怪的事情发生。这个时候就需要有并发的控制。举个例子,如果有两个同学同时都要去申请课室,如果申请的时间上有冲突,那么,我们应该将申请的时间岔开,保证大家都能用上课室。我们可以先将课室锁上,先获取到钥匙的学生先用课室,没获取到的学生要等到先前一位学生用完之后才可以使用课室。这个就是锁的概念,在数据库里也一样,要同时对一条数据进行修改,那么就要先获取锁之后才可以修改,保证数据的正确性。

读写锁

加锁固然解决了并发问题,但是这样资源的利用率不高,只要有一个线程获取了锁其它线程就不能对数据做任何操纵了,不管是读数据还是修改数据,严重拖慢了系统的效率。在系统中,事实上读的需求比写的需求要多得多,读数据之间不会有任何冲突。因此,如果读数据就没有必要加锁进行同步处理。所以,锁就可以分为读锁和写锁。读锁主要负责对读进行加锁,是多个线程之间共享的。而写锁不允许共享,它和任何其它的锁都是互斥的,如:写写互斥,写读互斥。

锁粒度

在现实生活中,我们对资源需求往往是多种多样的,我们的应用系统也是如此。比如,我们在页面上修改了一条数据,但是在后端做的操作可能不是仅仅修改一条那么简单,往往会多个数据资源进行协调处理。如果对这些资源都需要做修改操作,在并发的情况下也需要做锁的同步操作。锁定资源的多少,就是锁粒度的概念。从概念上看,锁的粒度肯定是越少越好。MySQL根据存储引擎的不同,可分为表级锁和行级锁。