当前位置: 首页 > article >正文

MySQL 锁

MySQL中最常见的锁有全局锁、表锁、行锁。


全局锁

全局锁用于锁住当前库中的所有实例,也就是说会将所有的表都锁住。一般用于做数据库备份的时候就需要添加全局锁,数据库备份的时候是一个表一个表备份,如果没有加锁的话在备份的时候会有其他的事务进行提交,从而造成数据不一致,加锁后能保证在备份的时候不会有其他事务提交数据。


如何添加一个全局锁呢?

通过以下命令添加一个全局锁

#设置全局锁
flush tables with read lock;

执行增删改操作,会发现当前锁冲突,无法操作

insert into user (username, password, phone) 
values ('Jack', '$2a$10$6ptTq3V9XfaJmFYwYT2W9ud377BUkEWk.whf.iQ.0sX5F.L497rAC', 
        '12345678901');


执行读取操作

#读取user
    select *
    from user;


可以发现,添加全局锁后,整个数据库都变成了只读状态,操作完别忘记释放全局锁。

#释放全局锁
unlock tables;

表级锁

表级锁可细分为表锁、元数据锁、意向锁

  • 表锁:表锁有读锁和写锁,读锁当前客户端可读不可写(报错),其他客户端可读不可写(阻塞,直到释放锁)。写锁只有当前客户端可读可写,其他客户端不可读不可写        
  • 元数据锁:元数据锁分为读锁和写锁,读锁之间是共享的,即多个事务之间能同时读取数据,而写锁是排他的,主要为了防止在写的过程中数据结构发生改变,写锁同一时间只能被一个事务获取
  • 意向锁:意向锁的主要目的是减少行锁和表锁之间的冲突。意向锁能够快速判断是否发生锁冲突从而无需逐行检查每一行数据。意向锁可细分为共享锁和排他锁,共享锁之间是兼容的多个事务可以同时拥有,而排他锁是互斥的只能有一个事务持有
    SELECT
        object_schema,
        object_name,
        index_name,
        lock_type,
        lock_mode,
        lock_data
    FROM
        performance_schema.data_locks;


http://www.kler.cn/a/591068.html

相关文章:

  • 【GPT-SoVITS】GPT-SoVITSAPI调用:让二次元角色开口说话,打造专属语音合成系统
  • 反向波动策略思路
  • 默认参数 d = {} 的陷阱
  • springboot项目日志不打印
  • Using SAP S4hana An Introduction for Business Users
  • Linux上的`i2c-tools`工具集的详细介绍;并利用它操作IMX6ULL的I2C控制器进而控制芯片AP3216C读取光照值和距离值
  • 【算法题解答·七】哈希
  • VulnHub-Billu_b0x通关攻略
  • EditRocket for Mac v5.0.2 文本编辑器 支持M、Intel芯片
  • 基于多头注意机制的多尺度特征融合的GCN的序列数据(功率预测、故障诊断)模型及代码详解
  • 在WINDOWS中如何运行VBS脚本,多种运行方式
  • vscode vue3 jsconfig 与 tsconfig的区别
  • 扩展01:企业级Nginx+Keepalived双主架构实战
  • Hyperlane:Rust 语言打造的 Web 后端框架新标杆
  • LLM中lora的梯度更新策略公式解析
  • WiFi IEEE 802.11协议精读:IEEE 802.11-2007,19,ERP specification,802.11g,整合15/17/18
  • reactive数据修改无效
  • Visual Studio2022 中的键盘注释快捷方式
  • R语言绘图 | 环状柱状图+散点柱状组合图绘制
  • Spring中的循环依赖问题是什么?