MySql存储引擎中的锁

一、概念:

  • 什么是锁?主要是为了解决客户端并发读写造成冲突问题,将读写操作进行锁定的功能

二、表加锁的类型:

  • 读锁:又称为共享锁,对数据做查询select 访问MySQL服务自动给 表加读锁,加了读锁的表,允许多个连接同时对同一张表做查询访问(加锁期间 允许同时读,不允许写
  • 写锁:又称排它锁或互斥锁,对数据做写访问(insert | delete | update )时 , MySQL服务会自动给表加写锁(加锁期间 不允许读和写

三、表加锁的范围(锁粒度):

  • 行级锁:仅仅对被访问的行分别加锁,没有被访问的行不加锁
  • 表级锁:只要是对表做访问,就会把整张表加锁(不管访问的是1行 还是更多行)

四、相关命令:

SQL命令 说明
show open tables where in_user>0; 查看最近被锁的表
show status like "table_locks%" 查看锁表状态
show status like "Table_locks_immediate%" 立即获得表级锁的次数
show status like "Table_locks_waited%" 不能立即获取表级锁而需要等待的次数
lock tables 表名 read; 表加读锁
lock tables 表名 write; 表加写锁
unlock tables; 释放锁

五、使用示例:

  • 读锁例子
# 第一个连接
]#mysql  -uroot  -p密码
# 开启读锁
Mysql> Lock tables  tarena.salary  read; 
# 查询数据正常
Mysql> select  * from  tarena.salary;

# 第二个连接
]#-uroot  -p密码
# 查询数据正常
Mysql>  select  * from  tarena.salary;
# 插入数据 客户端显示等待
Mysql>  insert into  tarena.salary(employee_id,basic) values(1,20000); 

# 回到第一个连接
# 释放读锁
MySQL> Unlock tables;

# 回到第二个连接
# Insert命令执行成功
  • 写锁例子
# 第一个连接
]#mysql  -uroot  -p密码
# 开启写锁
Mysql> Lock tables  tarena.salary  write; 

# 第二个连接
]#-uroot  -p密码
# 查询数据 客户端显示等待
Mysql>  select  * from  tarena.salary; 
# 插入数据 客户端也显示等待
Mysql>  insert into  tarena.salary(
  employee_id,basic
) values(1,20000); 

# 回到第一个连接
# 释放锁
MySQL> Unlock tables;

# 回到第二个连接,
# 查和写的命令都可以执行了
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 我们在上篇文章中提到了记录锁(行锁)、间隙锁和临键锁,后台有小伙伴催我更新一下其他的锁。拖延症又犯了,趁周末,今天...
    阿Q说代码阅读 1,443评论 0 1
  • 锁是计算机协调多个进程或纯线程并发访问某一资源的机制。在数据库中,除传统的计算资源(CPU、RAM、I/O)的争用...
    编码前线阅读 4,145评论 0 0
  • 锁是计算机协调多个进程或线程并发访问某一资源的机制。在数据库中,除传统的计算资源(如CPU、RAM、I/O等)的争...
    薛延祥阅读 1,469评论 0 0
  • 目录:1.锁的定义与分类(表、行、页)2.锁相关的语句(查看锁)3.mysql事务4.乐观锁和悲观锁5.数据库死锁...
    lbcBoy阅读 9,095评论 1 6
  • 一、概述 数据库锁定机制简单来说,就是数据库为了保证数据的一致性,而使各种共享资源在被并发访问变得有序所设计的一种...
    忘忧谷主阅读 3,660评论 0 3