【锁】MySQL中有哪几种锁?

📚 欢迎来到我的Java八股文专栏! 🎉

各位程序员小伙伴们好呀~ 👋 我是雪碧聊技术,很高兴能在CSDN与大家相遇!✨

🚀 专栏介绍

这个专栏将专注于分享Java面试中的经典"八股文"知识点 💡,内容涵盖:

📌 Java基础核心概念

🧠 JVM原理与性能调优

🔄 多线程与并发编程

🏗️ 设计模式实战

🗃️ 常用框架源码解析

⚙️ 系统架构设计思想

🌟 为什么选择这个专栏?

🎯 精准定位:直击大厂Java面试高频考点

🧩 系统全面:从基础到进阶,构建完整知识体系

💎 实战导向:理论+代码示例,拒绝空谈

🔍 深度解析:不只是背诵,更要理解原理

🆕 持续更新:紧跟技术发展趋势

📖 学习建议

建议大家可以这样使用本专栏:

📅 每日一读:每天消化1-2个知识点

✍️ 动手实践:所有代码建议亲自敲一遍

🗂️ 分类整理:建立自己的知识脑图

🔄 定期复习:对抗遗忘曲线

💬 互动讨论:评论区欢迎交流探讨

🛠️ 工具推荐

学习过程中这些工具可能会帮到你:

🔧 IDEA:Java开发神器

📊 JProfiler:性能分析工具

🧪 JUnit:单元测试框架

📝 Markdown:笔记整理

🖇️ Git:版本控制

💌 致读者

技术之路道阻且长,但行则将至 ✊

在这个专栏中,我会:

✅ 用最通俗的语言解释复杂概念

✅ 提供可直接运行的代码示例

✅ 标注每个知识点的面试权重

✅ 分享实际项目中的经验教训

✅ 及时回复大家的疑问

🌈 最后寄语

"八股文"虽被诟病,但扎实的基础知识永远是程序员的立身之本 💪

希望这个专栏能成为你:

🎯 面试冲刺的利器

🏗️ 技术进阶的阶梯

🤝 结识同好的平台

让我们携手并进,在技术的星辰大海中扬帆远航! ⛵

记得⭐️收藏 ⭐️关注 ⭐️不迷路哦~ 😊

目录

一.乐观锁

二.悲观锁

三.共享锁(读锁)

四.排它锁(写锁)

五.表级锁

六.行级锁


一.乐观锁

乐观锁用数据版本(Version)记录机制实现,这是乐观锁最常用的一种实现方式。何谓数据版本?即为数据增加一个版本标识,一般是通过为数据库表增加一个数字类型的"version"字段来实现。当读取数据时,将version字段的值一同读出,数据每更新一次,对此version值加1。当我们提交更新的时候,判断数据库表对应记录的当前版本信息与第一次取出来的version值进行比对,如果数据库表当前版本号与第一次取出来的version值相等,则予以更新,否则认为是过期数据。

二.悲观锁

悲观锁在进行每次操作时都要通过获取锁才能进行对相同数据的操作,这点跟java中synchronized很相似,共享锁(读锁)和排它锁(写锁)是悲观锁的不同的实现。

三.共享锁(读锁)

共享锁又叫做读锁,所有的事务只能对其进行读操作不能写操作,加上共享锁后在事务结束之前其他事务只能再加共享锁,除此之外其他任何类型的锁都不能再加了。

**四.**排它锁(写锁)

若某个事物对某一行加上了排他锁,只能这个事务对其进行读写,在此事务结束之前,其他事务不能对其进行加任何锁,其他进程可以读取,不能进行写操作,需等待其释放。

**五.**表级锁

innodb的行锁是在有索引的情况下,没有索引的表是锁定全表的。

**六.**行级锁

行锁又分共享锁和排他锁,由字面意思理解,就是给某一行加上锁,也就是一条记录加上锁。

注意:行级锁都是基于索引的,如果一条SQL语句用不到索引是不会使用行级锁的,会使用表级锁。