品易云推流 关闭
文章详情页
文章 > MySQL > mysql表级锁的介绍

mysql表级锁的介绍

mysql表级锁

头像

小妮浅浅

2021-08-31 17:04:52539浏览 · 0收藏 · 0评论

1、MySQL里面表级别的锁有两种:一种是表锁,一种是元数据锁(meta data lock,MDL)。

 

表锁的语法是lock tables … read/write。可以用unlock tables主动释放锁,也可以在客户端断开的时候自动释放。lock tables语法除了会限制别的线程的读写外,也限定了本线程接下来的操作对象。

 

如果在某个线程A中执行lock tables t1 read,t2 wirte;这个语句,则其他线程写t1、读写t2的语句都会被阻塞。同时,线程A在执行unlock tables之前,也只能执行读t1、读写t2的操作。连写t1都不允许。

 

另一种表级锁是MDL。


2、MDL不需要显示使用,访问一个手表时会自动添加。

MDL的作用是保证读写的正确性。如果一个查询正在通过一个表中的数据,而另一个线程在执行过程中改变了该表的结构并删除了一列,那么查询线程得到的结果肯定不符合表的结构。

MDL引入MySQL5.5版本,当对表进行增删改查时,加MDL读锁;当对表进行结构变更时,加MDL写锁。

 

读锁不互斥,所以可以有多个线程同时对一个表格进行增删改查。

读写锁和写锁相互排斥,以确保变更表结构操作的安全性。因此,如果有两个线程,一个应该在一个表中添加字段,其中一个应该等到另一个执行完成。

在表格中添加字段,或修改字段,或添加索引,需要扫描整个表格的数据。操作大型手表时,应特别小心,以免影响在线服务。

 

以上就是mysql表级锁的介绍,希望对大家有所帮助。更多mysql学习指路:MySQL

本文转载于php中文网,如有侵犯联系作者修改。

关注

关注公众号,随时随地在线学习

本教程部分素材来源于网络,版权问题联系站长!

底部广告图