MySQL原理与优化原数据锁的应用

MySQL中原数据锁是系统自动控制添加的,对于用户来说无需显示调用,当我们使用一张表的时候就会加上原数据锁。

原数据锁的作用是为了保护表原数据的一致性,如果在表上有活动事务的时候,不可以对元数据进行写入操作。也就是为了避免DML和DDL之间的冲突,保证读写的正确性。

说白了就是,在对数据表进行读写操作的时候,不能进行修改表结构的操作。

如上图所示,在执行select操作的时候,MySQL会自动加上shared_read锁,在insert,update,delete以及selectforupdate操作的时候会加上shared_write锁,这两类锁是兼容的。

在执行altertable操作的时候,会加上exclusive锁,这个锁与shared_read和shared_write锁是互斥的,换句话说在做查询和更新表数据的时候,是不能够修改表结构的。

来看个例子

首先开启事务,使用select语句会针对表加上shared_read的共享锁

begin;

select*fromcourse;

此时查看原数据锁的信息

selectobject_type,object_schema,object_name,lock_type,lock_durationfromperformance_schema.metadata_locks;

通过上图我们可以发现,course表加上了shared_read锁。

接着,开启另外一个事务,记住刚才的事务不要


转载请注明:http://www.aierlanlan.com/cyrz/1765.html

  • 上一篇文章:
  •   
  • 下一篇文章: