MySQL中有哪几种锁?

server/2025/3/15 4:45:51/

大家好,我是锋哥。今天分享关于【MySQL中有哪几种锁?】面试题。希望对大家有帮助;

MySQL中有哪几种锁?

1000道 互联网大厂Java工程师 精选面试题-Java资源分享网

在MySQL中,锁是用来控制并发访问的机制,确保多个事务同时访问数据库时不会发生冲突。MySQL中主要有以下几种锁:

1. 全局锁(Global Locks)

  • 定义:全局锁是最重的锁类型,锁住了整个数据库实例,所有的数据库表和操作都会受到影响。
  • 使用场景:一般用于备份等需要确保数据库一致性的操作。
  • 例子FLUSH TABLES WITH READ LOCK,这会锁住整个MySQL数据库

2. 表锁(Table Locks)

  • 定义:表锁是锁住整个数据表,防止其他事务对该表进行读写操作。
  • 类型
    • 共享锁(Read Lock):允许其他事务读取表,但不允许修改。
    • 排他锁(Write Lock):会阻止其他事务对表进行任何读写操作。
  • 特点:表锁通常比行锁更粗粒度,可能会导致较大的性能瓶颈,尤其在高并发的情况下。
  • 例子
    • LOCK TABLE table_name READ:为表加共享锁。
    • LOCK TABLE table_name WRITE:为表加排他锁。

3. 行锁(Row Locks)

  • 定义:行锁是针对数据表中某一行进行加锁,保证事务在对表的某一行数据进行操作时,其他事务不会对该行数据进行干扰。
  • 使用场景:行锁适用于高并发写入操作的场景,可以最大限度地提高数据库的并发性。
  • 实现方式:MySQL的InnoDB存储引擎使用行级锁。
  • 类型
    • 共享锁(S锁,Shared Lock):允许事务读取该行数据,但不允许修改。
    • 排他锁(X锁,Exclusive Lock):会阻止其他事务对该行数据进行读写操作。
  • 例子:通过SELECT ... FOR UPDATE或者SELECT ... LOCK IN SHARE MODE来显式加锁行。

4. 自增锁(Auto-Increment Locks)

  • 定义:InnoDB使用自增锁来防止自增列(AUTO_INCREMENT)的值被并发访问时产生冲突。
  • 使用场景:当多个事务插入记录时,防止在使用自增列的同时出现重复值或者丢失值的情况。
  • 特点:自增锁会阻止其他事务同时插入记录,确保自增列的唯一性。

5. 意向锁(Intention Locks)

  • 定义:意向锁是InnoDB存储引擎的特殊锁类型,用来表示事务打算对某个数据行加锁。它是为了提高性能而设计的,避免了在事务加锁时对全表进行扫描。
  • 类型
    • 意向共享锁(IS,Intention Shared Lock):表示事务希望在某个行级别加共享锁。
    • 意向排他锁(IX,Intention Exclusive Lock):表示事务希望在某个行级别加排他锁。
  • 特点:意向锁并不直接加锁行数据,而是加在表上,用来指示事务打算对某行加锁。它是InnoDB为了优化多事务访问同一表时的性能而引入的机制。

6. 死锁(Deadlocks)

  • 定义:死锁是指两个或多个事务在互相等待对方释放资源时,造成一种僵局,事务无法继续执行。
  • 解决方案:MySQL的InnoDB存储引擎会自动检测并解决死锁,通常会回滚其中一个事务,以便其他事务继续执行。

总结:

MySQL的锁机制可以大致分为全局锁、表锁、行锁、意向锁和自增锁等类型,其中行锁和意向锁在InnoDB存储引擎中使用较多,能够有效提高并发性。在实际开发中,选择合适的锁类型非常重要,以保证事务的隔离性、并发性和数据一致性。


http://www.ppmy.cn/server/175062.html

相关文章

Prompt工程:大模型沟通指南(人工智能到大模型)

文章目录 人工智能到大模型机器学习深度学习大模型 Prompt工程:大模型沟通的桥梁 在人工智能的广袤领域中,大模型无疑是最为璀璨的明珠之一。它仿佛是一座连接人类与人工智能的桥梁,让我们能够更加深入地探索和利用人工智能的强大能力。而要实…

58.Harmonyos NEXT 图片预览组件架构设计与实现原理

温馨提示:本篇博客的详细代码已发布到 git : https://gitcode.com/nutpi/HarmonyosNext 可以下载运行哦! Harmonyos NEXT 图片预览组件架构设计与实现原理 文章目录 Harmonyos NEXT 图片预览组件架构设计与实现原理效果预览一、组件架构概述1. 核心组件层…

ubuntu 在VirtualBox 打不开终端

ctrlaltF3,进入命令行模式sudo nano /etc/default/locale LANG这行的值修改为:en_US.UTF-8执行 locale-gen --purge,等待生成完成reboot重启系统。再次进入系统后,终端就可以正常使用了 参考文章:VirtualBox安装Ubuntu…

蓝桥杯备考:图论初解

1:图的定义 我们学了线性表和树的结构,那什么是图呢? 线性表是一个串一个是一对一的结构 树是一对多的,每个结点可以有多个孩子,但只能有一个父亲 而我们今天学的图!就是多对多的结构了 V表示的是图的顶点集…

uni-app中,调用收货地址方法 uni.chooseAddress()不生效的问题

在uni-app中,如果调用收货地址方法 uni.chooseAddress()不生效的话,可以在manifest.json中,打开源码视图,找到mp-weixin,设置 然后将小程序进行重启即可

QT系列教程(13) 事件系统

事件系统 Qt事件系统是非常重要事件传递机制,所有消息传递流程都离不开这个机制,这里主要从重写类的事件响应函数,事件过滤器以及重写event函数三种方式做介绍。 重写事件函数 这种方式最为直接,我们先创建项目,选择QApplicati…

《灵珠觉醒:从零到算法金仙的C++修炼》卷三·天劫试炼(36)太极图化路径 - 不同路径(组合数学优化)

《灵珠觉醒:从零到算法金仙的C++修炼》卷三天劫试炼(36)太极图化路径 - 不同路径(组合数学优化) 哪吒在数据修仙界中继续他的修炼之旅。这一次,他来到了一片神秘的太极谷,谷中有一幅巨大的太极图,图中隐藏着无数路径。谷口有一块巨大的石碑,上面刻着一行文字:“欲破…

【webrtc debug tools】 rtc_event_log_to_text

一、rtc_event_log 简介 在学习分析webrtc的过程中,发现其内部提供了一个实时数据捕获接口RtcEventLog。通过该接口可以实时捕获进出webrtc的RTP报文头数据、音视频配置参数、webrtc的探测数据等。其内容实现可参考RtcEventLogImpl类的定义。其文件所在路径 loggin…