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

百度站长工具综合查询制作app的软件手机版

百度站长工具综合查询,制作app的软件手机版,烟台做网站工资,我想做个门户网站怎么做✅ 一、按粒度分类(锁的范围大小) 1. 表级锁(Table Lock) 锁住整张表粒度大,开销小,并发性差常见于:MyISAM 引擎 📌 示例: LOCK TABLES user WRITE; -- 会锁住整个 u…

✅ 一、按粒度分类(锁的范围大小)

1. 表级锁(Table Lock)

  • 锁住整张表
  • 粒度大,开销小,并发性差
  • 常见于:MyISAM 引擎

📌 示例:

LOCK TABLES user WRITE;
-- 会锁住整个 user 表,其他线程无法写入

2. 行级锁(Row Lock)

  • 锁住一行数据
  • 粒度小,开销大,并发性高
  • 常见于:InnoDB 引擎

📌 示例:

BEGIN;
SELECT * FROM user WHERE id = 1 FOR UPDATE;
-- 只锁住 id=1 的那一行

3. 页级锁(Page Lock)

  • 锁住一页数据(介于表锁与行锁之间)
  • MySQL 不常用,常见于某些数据库如 Oracle、SQL Server
  • MySQL 中的 BDB 引擎 支持

✅ 二、按锁的类型分类(访问行为)

1. 共享锁(Shared Lock / S 锁)

  • 允许多个事务同时读取一行,不能写
  • 用于实现并发读取一致性

📌 示例:

SELECT * FROM user WHERE id = 1 LOCK IN SHARE MODE;

2. 排他锁(Exclusive Lock / X 锁)

  • 只允许一个事务读取 + 修改,不能有其它事务访问
  • 修改数据前必须加排他锁

📌 示例:

SELECT * FROM user WHERE id = 1 FOR UPDATE;

✅ 三、InnoDB 引擎中的特殊锁

1. 意向锁(Intention Lock)

  • InnoDB 为了支持多粒度锁并存而引入的机制,自动加锁,无需手动控制。
  • 分为:
    • 意向共享锁(IS)
    • 意向排他锁(IX)

✅ 作用:告诉系统“我要在某些行上加 S 锁/X 锁”,避免和表锁冲突。


2. Gap Lock(间隙锁)

  • 锁住一个“值之间的范围”
  • 典型场景:防止幻读

📌 示例:

SELECT * FROM user WHERE age > 18 FOR UPDATE;
-- 锁住所有满足 age > 18 的“间隙”

3. Next-Key Lock(临键锁)

  • Gap Lock + 行锁 的组合
  • 也用于防止幻读

4. Record Lock(记录锁)

  • 真正只锁住一行
  • 是最基础的行锁形式

✅ 四、全局锁(Global Lock)

  • 通常用于备份全库时加锁
  • 会锁住整个数据库实例,不建议在线使用

📌 示例:

FLUSH TABLES WITH READ LOCK;

✅ 五、按加锁机制划分:

1、乐观锁

乐观锁基于这样的假设:冲突在系统中出现的频率较低,因此在数据库事务执行过程中,不会频繁地去锁定资源。相反,它在提交更新的时候才检查是否有其他事务已经修改了数据。

可以通过在数据表中使用版本号(Version)或时间戳(Timestamp)来实现,每次读取记录时,同时获取版本号或时间戳,更新时检查版本号或时间戳是否发生变化。

如果没有变化,则执行更新并增加版本号或更新时间戳;如果检测到冲突(即版本号或时间戳与之前读取的不同),则拒绝更新。


2、悲观锁

悲观锁假设冲突是常见的,因此在数据处理过程中,它会主动锁定数据,防止其他事务进行修改

可以直接使用数据库的锁机制,如行锁或表锁,来锁定被访问的数据。常见的实现是 SELECT FOR UPDATE 语句,它在读取数据时就加上了锁,直到当前事务提交或回滚后才释放。


举例:如何解决库存超卖问题?

按照乐观锁的方式:
使用 UPDATE ... WHERE 结合版本号 / 库存条件,如果更新失败,说明有竞争,重试操作

UPDATE inventory SET count = count - 1, version = version + 1 WHERE product_id = 1 AND version = current_version;

按照悲观锁的方式:
使用 SELECT ... FOR UPDATE 加排他锁,确保当前事务结束前,其他事务无法修改数据。

START TRANSACTION;
SELECT * FROM inventory WHERE product_id = 1 FOR UPDATE;
UPDATE inventory SET count = count - 1 WHERE product_id = 1;
COMMIT;

🧠 面试高频陷阱

问题易错理解正确认识
SELECT * FROM table WHERE id = 1 会加锁吗?会加锁❌ 默认不会加锁,除非加 FOR UPDATE
行锁一定是锁一行?是的❌ 有可能是间隙锁或临键锁
MyISAM 支持事务和行锁?支持❌ MyISAM 不支持事务,也不支持行锁

🔐 MySQL 锁分类总览图(Mermaid Mindmap)


🧠 图示说明:

  • 四大主干维度:按照粒度行为类型InnoDB 特性特殊用法分类;
  • 每种锁都附有简要描述使用示例,方便记忆;
  • 特别标出 InnoDB 专属锁机制,面试考频高。
http://www.dtcms.com/wzjs/545704.html

相关文章:

  • 做网站签了合同后不想做了郑州pc网站开发
  • 自己做的网站可以挂在哪里谷歌浏览器下载手机版app
  • 网站备案好后设计公司
  • 删除网站备案wordpress从入门
  • 金华市建设银行网站免费整套ppt模板下载网站
  • 简单网页的设计过程阿里网站seo
  • 87网站一起做最近热点新闻大事件
  • 电商网站wordpress做手机网站需要多少钱
  • 网站建设功能覆盖范围无网站如何做淘宝客
  • 东阳科技网站建设wordpress ajax加载
  • 山西省城乡建设厅网站网站正在建设代码
  • 网站建设技术清单外贸网站搭建推广
  • 住房和城乡建设部注册中心网站建筑工程造价网
  • 企业应加强自身网站建设百度网盘app下载安装
  • 焦作做网站哪些网站是用jsp做的
  • 网站空间数据库上传黑龙江建设网官方网站特种作业证
  • 昆明好的网站制作揭阳建站服务
  • 湖南营销网站建设区块链插件wordpress
  • 网站开发用什么语言比较流行用php做网站的方法
  • 网站建设的主要工作培训做网站
  • 做ppt赚钱的网站wordpress获取文章信息
  • 建设网站虚拟主机是啥意思网络营销课程总结与心得体会
  • 安康市城乡建设规划局网站网站建设用啥系统好
  • 天津知名网站建设公司自己做微信团购小程序
  • 如何做网站镜像网站域名查主机名
  • 公司网站建设维护合同范本网站等比例缩放设计
  • 餐饮手机微网站怎么做网站建设和利用情况
  • 美容行业网站建设黄冈网站推广软件下载
  • 美食网站开发计划个人简历免费制作网站
  • 国内免费图片素材网站山西智能建站系统价格