MySQL - 当前读和快照读、`UPDATE`、`INSERT`、`DELETE`加锁了?

当前读

  • 当进行当前读操作时,如使用SELECT ... FOR UPDATESELECT ... LOCK IN SHARE MODEUPDATEINSERTDELETE等操作时,系统会读取数据的最新版本。
  • 当进行当前读操作时,通常需要获取锁,以确保其他并发事务不能修改当前记录。这是一种悲观锁的实现,适用于需要确保数据一致性和避免并发冲突的情况。

快照读

  • 快照读是一种非阻塞读取数据的方式,适用于SELECT操作等不需要锁定数据的操作。
  • 在快照读中,系统不会读取数据的最新版本,而是读取在事务开始时可见的数据快照。这是通过多版本并发控制(MVCC)实现的。
  • 快照读通常不会锁定数据,因此多个事务可以同时读取相同的数据而不会相互干扰。

总结:

  • 当前读用于确保数据的一致性和避免并发冲突,通常需要锁定数据。
  • 快照读用于提高并发性能,通过MVCC实现,不会锁定数据,允许多个事务同时读取数据。它适用于不需要锁定数据的读取操作。

UPDATEINSERTDELETE加锁了?

对于UPDATEINSERTDELETE操作,通常会引入锁定机制,以确保数据的一致性和避免并发冲突。这些操作会涉及对数据的修改,因此需要考虑并发事务可能同时访问和修改相同数据的情况。以下是关于这些操作的锁定机制的一些说明:

  1. UPDATE操作

    • 当执行UPDATE操作时,通常需要获取排他锁(X锁)或更新锁(U锁)以确保数据的一致性。
    • 排他锁(X锁)会阻止其他事务同时获取任何类型的锁,包括共享锁(S锁)和排他锁。
    • 更新锁(U锁)是一种特殊的锁定模式,用于在某些情况下降级为共享锁。它允许其他事务获取共享锁,但会阻止其他事务获取排他锁。
  2. INSERT操作

    • INSERT操作通常不会引入锁定机制,因为它通常是在表的末尾插入新数据,不会涉及到已有数据的锁定。
  3. DELETE操作

    • DELETE操作通常需要获取排他锁(X锁)以删除数据,以确保数据的一致性。这可以防止其他事务同时访问或修改要删除的数据。

需要注意的是,锁定的行为还受到事务隔离级别的影响。不同的隔离级别会导致不同的锁定行为,例如,在Read Committed隔离级别下,SELECT操作可能会读取已提交的数据而不会等待锁,但在Serializable隔离级别下,会引入更多的锁定以确保数据的一致性。

综上所述,UPDATEINSERTDELETE操作通常会引入锁定机制,以处理并发访问和修改数据的情况。然而,具体的锁定行为会受到隔离级别和数据库管理系统的实现方式的影响。

相关推荐
极限实验室2 小时前
APM(一):Skywalking 与 Easyearch 集成
数据库·云原生
饕餮争锋2 小时前
SQL条件中WHERE 1=1 的功能
数据库·sql
玄斎2 小时前
MySQL 单表操作通关指南:建库 / 建表 / 插入 / 增删改查
运维·服务器·数据库·学习·程序人生·mysql·oracle
编织幻境的妖3 小时前
SQL查询连续登录用户方法详解
java·数据库·sql
编程小Y3 小时前
MySQL 与 MCP 集成全解析(核心原理 + 实战步骤 + 应用场景)
数据库·mysql·adb
零度@4 小时前
SQL 调优全解:从 20 秒到 200 ms 的 6 步实战笔记(附脚本)
数据库·笔记·sql
Miss_Chenzr4 小时前
Springboot优卖电商系统s7zmj(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面。
数据库·spring boot·后端
lvbinemail4 小时前
Grafana模板自动复制图表
数据库·mysql·zabbix·grafana·监控
Miss_Chenzr4 小时前
Springboot旅游景区管理系统9fu3n(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面。
数据库·spring boot·旅游
小虾米vivian4 小时前
dmetl5 运行失败,提示违反协议?
数据库·达梦数据库