为了保持数据的一致性,数据库提供了事务。但是,这只能解决单个会话的问题,并不能解决并发操作下数据的一致性。

并发操作下,数据会出现以下问题:

1、修改丢失
事务A与事务B从数据库中读入同一数据并修改,事务B提交的结果破坏了事务A提交的结果,导致事务A的修改被丢失。

2、脏读
事务A修改某一数据,写回磁盘,期间事务B读取同一数据;事务A由于某种原因被撤销,数据回滚,则B读到的数据与库中真实数据不符。(这个与数据库的事务隔离级别有关,可参考拙作:mysql的4种事务隔离级别)

3、不可重复读
事务A读取数据d,期间事务B读取数据并修改,提交;则事务A中的数据与库中真实数据不符。

应对之道是引入锁。
常见的锁有排他锁(写锁)和共享锁(读锁)。

1、共享锁
共享锁的意义在于加了共享锁,其他会话就不能加排他锁,除非共享锁移除或释放。读的时候加上共享锁。注意,共享锁的特点是不一定要显式释放,一个会话A加了共享锁,会话B也可以加共享锁,那么共享锁就转移到了会话B,相当于会话A的共享锁已经释放。锁是只有一把的。

2、排他锁
加上排他锁,其他会话不能再加排他锁,除非显式释放。在修改记录的时候使用,所以也叫写锁。

数据库共享锁(读锁)和排他锁(写锁)相关推荐

  1. MySQL 意向共享锁、意向排他锁、死锁

    文章目录 一.InnoDB表级锁 二.意向共享锁和意向排他锁(针对整表) 三.死锁 1. 数据库中的死锁 2. 死锁场景以及解决办法 3. 操作 四.锁的优化建议 一.InnoDB表级锁 我们知道,I ...

  2. mysql innodb 排他锁_MySQL 针对 InnoDB 引擎锁的种类:行锁(共享锁和排他锁)和表锁(意向共享锁和意向排他锁)...

    InnoDB 锁快速到底 行锁:共享锁(S).排他锁(X) 表锁:意向共享锁(IS).意向排他锁(IX) 下面主要针对 MySQL 中行级锁中的共享锁(S)与排他锁(X)进行分析 共享锁又称为读锁,简 ...

  3. 重命名数据库解决“无法用排他锁锁定该数据库”

    重命名数据库解决"无法用排他锁锁定该数据库" 我们在重命名数据库时会遇到很多问题, 如: 消息 5030,级别 16,状态 2,第 1 行 无法用排他锁锁定该数据库,以执行该操作. ...

  4. mysql锁机制(共享锁(S)、排他锁(X)、意向共享锁(IS)、意向排他锁(IX)的关系,死锁,乐观锁,悲观锁...)

    1. 锁的基础与行锁的特点 1.1 概念 在开发多用户.数据库驱动的应用时,相当大的一个难点就是解决并发性的问题,目前比较常用的解决方案就是锁机制. 锁机制也是数据库系统区别于文件系统的一个关键特性. ...

  5. 详解:S锁(读锁)和X锁(写锁)

    事务T读取数据R X锁:写锁,排它锁(exclusive locks独家排它) T对R加X锁,T只能读取和修改,其他事务不能对R+任何锁. S锁:读锁,共享锁(share locks) T对R+S锁, ...

  6. mysql 共享锁_mysql有排他锁为什么还需要共享锁呢?

    两把锁缺一不可,InnoDB 引擎中的四种隔离级别就是用 排他锁 + 共享锁 实现的. 下面是个人理解,可能并不严谨. 首先说一下并发可能产生的四种问题,如果你还不了解这四个问题,最好拿至少 20 分 ...

  7. MySQL乐观锁、共享锁、排他锁、行锁、表锁区别和使用方法

    数据库锁分类 锁模式分类 乐观锁.悲观锁 范围锁 行锁.表锁 算法锁 临间锁.间隙锁.记录锁 属性锁 共享锁(读锁).排他锁(写锁) 状态锁 意向共享锁.意向排他锁 一.乐观锁和悲观锁 1.乐观锁介绍 ...

  8. Mysql共享锁、排他锁、悲观锁、乐观锁及其使用场景

    一.相关名词 |--表级锁(锁定整个表) |--页级锁(锁定一页) |--行级锁(锁定一行) |--共享锁(S锁,MyISAM 叫做读锁) |--排他锁(X锁,MyISAM 叫做写锁) |--悲观锁( ...

  9. mysql共享锁使用方法_浅谈Mysql共享锁、排他锁、悲观锁、乐观锁及其使用场景...

    Mysql共享锁.排他锁.悲观锁.乐观锁及其使用场景 一.相关名词 |--表级锁(锁定整个表) |--页级锁(锁定一页) |--行级锁(锁定一行) |--共享锁(S锁,MyISAM 叫做读锁) |-- ...

  10. mysql锁的应用场景_浅谈Mysql共享锁、排他锁、悲观锁、乐观锁及其使用场景

    Mysql共享锁.排他锁.悲观锁.乐观锁及其使用场景 一.相关名词 |--表级锁(锁定整个表) |--页级锁(锁定一页) |--行级锁(锁定一行) |--共享锁(S锁,MyISAM 叫做读锁) |-- ...

最新文章

  1. 清科-2018年中国金融科技领域10强
  2. 欧盟脑计划:高精度仿真「基底核」,实现自涌现「通用智能」
  3. mariadb数据库备份与恢复
  4. org.apache.flink.table.api.bridge.java.internal.BatchTableEnvironmentImpl找不到的问题
  5. android中资源文件的两种访问方式,在android开发中进行数据存储与访问的多种方式介绍...
  6. 小汤学编程之JAVA基础day06——面向对象(一):类与对象
  7. ORA-02266错误处理
  8. C语言dev查看调试变量,C语言程序设计-c4_C语言上机_Dev调试.doc
  9. python web框架哪个好_盘点:9款流行Web框架及其优缺点
  10. 揭秘springboot集成tomcat原理
  11. 读《Unity 5.x 游戏开发指南》
  12. 统计学习方法——机器学习和统计学习
  13. visual foxpro
  14. 谷歌浏览器元素定位神器 -- chropath插件
  15. php ar技术,vr和ar是什么技术,有什么区别
  16. 基于激光投影技术的虚拟键盘
  17. 【vconsole】vconsole网页调试
  18. 在自己电脑上用excel重新绘制荧光定量溶解曲线
  19. NYOJ1238 最小换乘
  20. UCOSII 移植文件详解——笔记

热门文章

  1. 深拷贝和浅拷贝的区别和与原理
  2. Kaggle实战(一):数据相关性分析
  3. Linux API-共享内存:shmget、shmat、shmdt、shmctl
  4. c 语言如何打开d盘文件夹,如何通过cmd命令符进入d盘以及c盘?介绍详情进入教程...
  5. 手把手带你玩转Spark机器学习-使用Spark进行数据降维
  6. 中维世纪视频汇聚,为百路以上项目提供一站式视频集中管理服务
  7. Streamsets简介
  8. 【实战】PHP如何使用 ElasticSearch 做搜索
  9. C# 在PPT中绘制形状(shape)
  10. ArcMap:第一届全国大学生GIS技能大赛(滁州学院)详解-下午题