首页 > 数据库 >MySQL(二十)锁(一)锁的概述与S、X锁

MySQL(二十)锁(一)锁的概述与S、X锁

时间:2023-05-09 14:14:32浏览次数:39  
标签:事务 加锁 二十 mysql 记录 并发 概述 MySQL 操作

MySQL(二十)锁(一)锁概述、S锁和X锁


1 概述

  • 是计算机协调多个线程或进程并发访问某一资源的机制

    ​ 在程序开发过程中会存在多线程同步的问题,当多个线程并发访问某个数据的时候,尤其是一些敏感的数据(如金额、订单等),就需要保证这个数据在任何时刻都最多只有一个线程在访问,以保证数据的一致性和完整性。

  • 在开发过程中加锁就是为了保证数据的一致性

  • 锁机制也为MySQL各个隔离级别提供了保证。

  • 锁冲突也是影响数据库并发访问性能的一个重要因素

2 MySQL并发事务访问相同记录

​ 并发事务访问相同记录的情况主要有以下三种:

2.1 读读情况

​ 即并发事务读取相同的记录,由于读取记录不会对记录产生任何影响,因此不会引起各种问题,所以允许这种情况的发生。

2.2 写写情况

​ 即并发事务相继对相同的记录做出改动,这种情况下会发生脏写,而脏写在任何隔离级别下都是不被允许的,解决这一问题正是通过锁机制其实是内存中的一种结构,加锁的过程如下:

  • 当一个事务想要对记录进行改动,首先会查看内存中有没有和记录做关联的锁结构

  • 如果没有的话,就会生成一个锁结构与记录相关联,获取锁成功

    image-20230506134633101
  • 有的话则表示该事务获取锁失败,也会生成一个锁结构与记录关联,并设置is_waiting表示获取锁失败

    image-20230506135057522.

  • 事务提交后,会将由该事务生成的锁结构释放掉,然后看看还有没有别的事务在等待获取锁,如果有则将其is_waiting改为false,并将该事务对应的线程唤醒

    image-20230506135332983

​ 锁结构内的信息有很多,主要的信息有:

  • trx信息:记录是哪个事务产生的锁结构
  • is_waiting:代表当前事务是否在等待
2.3 读写或者写读情况

​ 即一个事务执行读操作,另一个事务执行改动操作,这种情况下可能会发生脏读不可重复读幻读问题。

标签:事务,加锁,二十,mysql,记录,并发,概述,MySQL,操作
From: https://www.cnblogs.com/tod4/p/17384665.html

相关文章

  • MySQL(二十)锁(三)乐观锁与悲观锁、显示隐式锁和其他锁
    MySQL(二十)锁(三)乐观锁与悲观锁显式锁和隐式锁1从对待锁的态度划分:乐观锁、悲观锁从对待锁的态度划分,可以将锁划分为乐观锁和悲观锁,可以看出这两种锁是两种对待数据并发的思维方式。乐观锁和悲观锁并不是锁,而是锁的设计思想1.1乐观锁乐观锁对数据被其他事务修改持有乐观......
  • MySQL(二十)锁(二)表锁、行锁与页级锁
    目录MySQL(二十)锁(二)表锁、行锁与页级锁从操作粒度的锁类型划分:表级锁、行级锁和页锁1表级锁(TableLock)1.1表级别的S和X锁1.2意向锁......
  • MySQL(二十一)MVCC多版本并发控制
    MySQL(二十一)MVCC多版本并发控制1什么是MVCCMVCC(MultiversionConcurrencyControl)多版本并发控制。即通过数据行的多个版本管理来实现数据库的并发控制,使得在InnoDB事务隔离级别下执行一致性读操作有了保障。就是为了查询一些正在被其他事务更新的值的时候,能够查到它们被更......
  • MySQL(十八)MySQL事务(二):事务的隔离级别
    MySQL(十八)MySQL事务(二):事务的隔离级别​ MySQL是一个客户端/服务器架构的软件,可以有若干个客户端与之连接,连接上之后都可以被称作是一个会话,每个客户端都可以在自己的会话中向服务器发出请求语句,一个请求语句可能是事务的一部分,因此对于服务器来说需要同时处理多个事务。由于事......
  • MySQL(十九)MySQL事务日志(一)RedoLog
    MySQL(十九)MySQL事务日志(一)RedoLog​ 事务的四种特性:原子性、一致性、持久性和隔离性都是基于什么机制实现的?事务的隔离性由锁机制实现而事务的原子性、一致性和持久性则由事务的redo和undo日志来实现的redolog是重做日志,提供再写入操作,恢复提交事务修改的页的操作......
  • mysql 索引
    mysql索引按存储方式区分: 一:b树,通常是使用b树这种方式,只有一个根节点,叶子节点之间彼此相连 二:hash,首先不能使用hash索引排序,并且它只支持等值索引,比如"=""in()""<=>"。 不支持键的部分匹配,因为计算hash值的时候是根据整体索引值来计算的。 建立hash索引相比b树需要更长的......
  • MySQL(十九)MySQL事务日志(二)UndoLog
    MySQL(十九)MySQL事务日志(二)UndoLog1undo日志概述​ redolog是事务持久性的保障,而undolog则是事务原子性和一致性的保证,如上图,在事务中更新数据的前置操作其实是需要将数据写入到undolog方便回滚。​ 事务需要保证原子性,也就是事务中的操作要么全部完成、要么全部不做。......
  • You have an error in your SQL syntax; check the manual that corresponds to your
    问题描述显示在条件查询的sql语句那里报错问题解决本来我是习惯了使用servlet写数据库操作的,然后就直接忽略掉了,或者说,直接忘记了在jsp里面的sql语句怎么正确书写了;经过查阅资料发现,查询语句是这样写的:Stringsql="select*frombookwhereid="+id;......
  • Centos7安装MySQL详细步骤(配置开机自启)
    MySQL检查系统是否安装过mysql//检查系统中有无安装过mysqlrpm-qa|grepmysql//查询所有mysql对应的文件夹,全部删除whereismysqlfind/-namemysql卸载CentOS7系统自带mariadb#查看系统自带的Mariadb[root@CDH-141~]#rpm-qa|grepmariadbmariadb-libs-5.5......
  • MYSQL查询【全部表】和表【所有字段】
    最近在做一些关于BI的东西。记录下。数据库查询全部表名称和备注信息只能查询表名SHOWTABLES; 查询表名和表备注SELECTTABLE_NAMEtablename,TABLE_COMMENTremarkFROMINFORMATION_SCHEMA.TABLESWHEREtable_schema="xxxx_xxxx"andT......