无论何时,只要多个查询需要在同一时刻修改数据,都会产生并发控制的问题。mysql有两个层面的并发:存储引擎层和服务器层。
一般解决并发都会通过锁机制实现,数据库中也是如此。
锁的类型
在处理并发的读取或者写入时,会有两种类型的锁:
1,读锁,也叫共享锁:共享的,相互不会阻塞的
2. 写锁,也叫排他锁,一个写锁会阻塞其他的写锁和读锁,这样可以确保在给定的时间,只有一个用户在写入操作并防止其他用户读取正在被写入的资源。
锁的粒度
锁的粒度是为了提高并发的性能的。尽量只要锁定需要修改的部分数据,而不是所有的资源。
分为:
1,表锁 ,开销最小的策略,锁定整张表。虽然存储引擎可以管理自己的锁,但是mysql还是会通过各种有效的标所来实现目的。比如说服务器会为ALTER TABLE等操作使用标所,忽略存储引擎的锁机制(行级锁)。
2.行级锁,可以最大程度支持并发,只在存储引擎级别实现,在mysql服务器层没有实现。