MySQL InnoDB的3种行锁定方式

yizhihongxing

MySQL InnoDB引擎提供了三种行锁定方式:共享锁(S锁)、排它锁(X锁)和意向锁(IS锁和IX锁)。

共享锁(S锁)

共享锁(S锁)是用来保证读取的数据在事务间的一致性。多个事务可以同时获取共享锁定,因为他们都只是读取数据而不做任何修改。但是,一个事务获取了共享锁之后,其他事务便不能再对该行加排它锁。

语法:SELECT ... FOR SHARE

例如,假设有一个表t,其中包含字段a和b。两个事务A和B分别执行以下语句:

事务A:SELECT * FROM t WHERE a=1 FOR SHARE;
事务B:SELECT * FROM t WHERE a=1 FOR SHARE;

由于两个事务使用了共享锁定,所以它们都可以查询到字段a=1的行并读取其数据,但是没有一个事务可以对这些行进行修改操作。如果其中一个事务尝试修改这些行,则需要等待另一个事务释放它的共享锁。

2. 排它锁(X锁)

排它锁(X锁)是用来在事务中修改数据的。同一时刻只有一个事务可以获取排它锁。其他非当前事务的读写操作都需要等待排它锁释放。也就是说,如果一个事务A想要对一个行进行修改,那么它必须先获取对应的排它锁,否则就需要等待。

语法:SELECT ... FOR UPDATE

例如,假设有一个表t,其中包含字段a和b。两个事务A和B分别执行以下语句:

事务A:SELECT * FROM t WHERE a=1 FOR UPDATE;
事务B:SELECT * FROM t WHERE a=1 FOR UPDATE;

由于只有一个事务可以获取排它锁,所以事务B需要等待事务A释放排它锁后才能获取它。

意向锁(IS锁和IX锁)

意向锁(IS锁和IX锁)是用来在表级别上管理行级别锁的。在获取行级别锁之前,必须先获取表级别上的意向锁,在释放行级别锁之后,也需要同样先释放表级别上的意向锁。

意向锁分为两种类型:IS锁和IX锁。

IS锁意味着一个锁定的事务想要在一个表的行上增加共享锁定。IX锁,是一个锁定事务想要在表的行上增加排它锁。

在关于行的锁定之前,在表上增加一个意向锁。如果一个进程想要取出某行的共享锁定,那么MySQL检查表上是否已有一个意向锁,并检查该锁是否为IS。如果是,那么该进程可以在该行上加共享锁定。如果该表有一个IX意向锁,则MySQL允许进程取出排它锁。同样,如果进程想要取出排它锁,那么MySQL会检查该表上是否有一个IX意向锁。

语法:LOCK IN SHARE MODEFOR UPDATE已经隐含了意向锁。

例如,假设有一个表t,其中包含字段a和b。事务A执行以下语句对表t上锁定:

LOCK TABLE t WRITE;

此时,在事务A释放锁定之前,其他事务T1和T2无法对表t进行任何读写操作,它们会被阻塞。

总之,MySQL InnoDB引擎提供了三种行锁定方式:共享锁(S锁)、排它锁(X锁)和意向锁(IS锁和IX锁)。开发人员可以根据实际需求选择适当的锁定方式以保证数据的一致性和安全性。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:MySQL InnoDB的3种行锁定方式 - Python技术站

(0)
上一篇 2023年3月10日
下一篇 2023年3月10日

相关文章

  • 在MAMP环境下安装MySQLdb的方法

    下面是在MAMP环境下安装MySQLdb的详细攻略: 步骤一:安装MAMP 下载MAMP软件安装包,可以在官网上下载,选择适合自己系统的版本。 双击安装包,完成MAMP的安装,启动MAMP即可。 步骤二:安装MySQLdb 使用终端进入MAMP的MySQL目录: cd /Applications/MAMP/Library/bin 安装MySQLdb: sud…

    database 2023年5月22日
    00
  • C#连接mysql数据库完整实例

    C#连接mysql数据库完整实例 前言 本文将介绍在C#中如何连接mysql数据库。通过阅读本文,你将学到如下知识: 下载并安装与mysql连接的必备工具; C#连接mysql数据库的代码; 如何进行数据库的增加/删除/修改/查询。 步骤 步骤一:安装mysql和mysql .NET Connector 下载并安装mysql数据库:从mysql官网下载安装m…

    database 2023年5月21日
    00
  • MySQL安装配置方法教程

    MySQL安装配置方法教程 1.下载MySQL安装包 到MySQL官网(https://dev.mysql.com/downloads/mysql/)下载最新版本的MySQL安装包,选择适合你操作系统的版本和对应的发行版,例如:Windows操作系统下选择Windows(x86, 32-bit)或Windows(x86, 64-bit)发行版。 2.安装My…

    database 2023年5月22日
    00
  • MySQL数据库导出与导入及常见错误解决

    MySQL数据库导出与导入及常见错误解决 MySQL是一个常用的关系型数据库管理系统,在使用MySQL数据库时,有时需要进行数据库导入导出的操作。下面将详细讲解MySQL数据库导入导出的完整攻略,并列出常见的错误类型及解决方法。 导出数据库 1.使用命令行进入MySQL,输入以下命令创建要导出的数据库: CREATE DATABASE yourdatabas…

    MySQL 2023年5月18日
    00
  • MySql逗号拼接字符串查询的两种方法

    下面是详细的攻略。 MySql逗号拼接字符串查询的两种方法 概述 在数据库中,经常需要将某个字段值用逗号拼接成字符串,例如将某个产品的多个属性值拼接成一个字段,或者将某个用户的多个标签拼接成一个字段等。下面将介绍 MySQl 中两种逗号拼接字符串查询的方法。 方法一:GROUP_CONCAT函数 GROUP_CONCAT函数是 MySql 中用于字符串拼接的…

    database 2023年5月22日
    00
  • CentOS 6.5 x64系统中安装MongoDB 2.6.0二进制发行版教程

    标题: CentOS 6.5 x64系统中安装MongoDB 2.6.0二进制发行版教程 简介 本文将介绍在 CentOS 6.5 x64 系统中安装 MongoDB 2.6.0 二进制发行版的详细步骤。这个方法可以适用于服务器和非服务器环境。 步骤 1. 准备工作 在开始安装前,我们需要先检查系统是否具有一些必要程序: $ yum -y update $ …

    database 2023年5月22日
    00
  • 完美介绍linux环境变量与部分命令

    完美介绍Linux环境变量与部分命令 环境变量 什么是环境变量 环境变量是用于存储关于操作系统或进程的信息的动态值。它们通常是在启动进程或登录会话时设置的,可用于控制程序的行为或通知程序找到需要的资源。 常见环境变量 PATH:它指定了系统执行命令时需要搜索的路径列表,系统在执行命令时会在这些路径下查找命令。 HOME:当前用户的主目录路径。 LANG:当前…

    database 2023年5月22日
    00
  • 64位Win10系统安装Mysql5.7.11的方法(案例详解)

    这里将详细讲解在64位Win10系统上安装Mysql5.7.11的方法。 准备工作 首先,需要准备好Mysql5.7.11的安装文件和Winrar软件。Mysql5.7.11的安装文件可以从Mysql官网上下载,Winrar软件则可在官网或其他下载站点上获得。 安装步骤 解压Mysql5.7.11安装文件 双击Mysql5.7.11安装文件中的压缩包,使用W…

    MySQL 2023年5月18日
    00
合作推广
合作推广
分享本页
返回顶部