MySQL事务与锁

在关系型数据库内,事务是由一个SQL或一组SQL语句组成的逻辑处理单元。也就是说事务就相当于一个盛放SQL的容器,事务中的SQL要么全部执行成功,要么所有已经修改的操作都回滚到原来的操作,即一条SQL也不能执行成功。

事务的四大特性(ACID):

隐式==自动

显式==手动

在高并发场景中,多个并发事务操作相同的数据,一些奇怪的现象是数据不安全的表现。

[En]

In a high concurrency scenario, multiple concurrent transactions operate the same data, and some strange phenomena are a manifestation of data insecurity.

锁是一种确保数据安全的机制,即协调多个进程或线程并发访问一个资源。

[En]

Lock is a mechanism to ensure data security, that is, to coordinate multiple processes or threads to access a resource concurrently.

以互斥为例,一次只能运行多个并发任务中的一个,以牺牲效率来保证数据安全。

[En]

Take mutex as an example, so that only one of multiple concurrent tasks can be run at a time, sacrificing efficiency for data security.

锁的优缺点:

  • 优势:确保并发场景下的数据安全。
    [En]

    advantage: ensuring the security of data in concurrent scenarios.*

  • 缺点:降低了效率。

因此,在使用锁时,应尽可能缩小锁的范围,即锁定的数据越小越好,并发能力越高。

[En]

Therefore, when using the lock, we should narrow the scope of the lock as much as possible, that is, the smaller the locked data, the better, the higher the concurrency ability.

锁的分类:

按粒度分类:行级锁、表级锁、页级锁。

[En]

Classified by granularity: row-level lock, table-level lock, page-level lock.

按级别分类:共享锁、排他锁。

[En]

Classified by level: shared lock, exclusive lock.

按使用方式分类:乐观锁(当我更改数据时,没有人在修改和我相同的数据,也可以说它本身不是锁,因为它是从程序的角度编写程序的例程。本质上,没有锁),悲观锁(在我的事务中,当我更改数据时,我总是认为肯定有人在抢我悲观锁通常是使用数据内置的锁定机制实现的)

[En]

Classified by way of use: optimistic lock (no one is modifying the same data as me when I change the data, it can also be said that it is not a lock itself, because it is a routine of writing a program from a program point of view. Essentially, there is no lock), pessimistic lock (in my affairs, when I change the data, I always think that someone must be robbing me Pessimistic locks are usually implemented using the data-built-in locking mechanism)

行级锁:

行级锁它分为共享锁,排他锁,是MySQL中粒度最细的一种锁,所以它的并发能力也是最高的。

对于insert、update、delete语句、innodb会自动给涉及的数据加锁,而且是排他锁;

对于普通的select语句,innodb不会加任何锁,需要手动自己加,可以加两种类型的锁;

--共享锁(s):能同时加到锁和抢到锁的是多个,保障读的一致性
select * from 表名 where ... lock in share mode;
--排他锁(x):同一时间只能有一个能抢到,保障写数据的安全
select * from 表名 where ... for update;

锁的使用:例如

1、事务A对id=3的行加了互斥锁后,其他事务对id=3的行不能加任何锁(写不行,但是可以读)

2、事务A对id=3的行加了共享锁后,其他事务对id=3的行只能加共享锁,或者不加锁(写不行,但可以读)

表级锁:

表级锁是MySQL中粒度最大的一种锁,整张表都被加锁,当然并发能力也是最低的。

lock table 表名 read(write),表名 read(write),.........;

--SQL语句

unlock tables;  -->释放当前会话持有的任何锁

页级锁:

页锁是介于表锁和行锁之间的一种锁,粒度介于表锁和行锁之间,并发能力一般。

[En]

Page lock is a kind of lock between table lock and row lock, the granularity is between table lock and row lock, and the concurrency ability is general.

Original: https://www.cnblogs.com/XiaoYang-sir/p/15866057.html
Author: Mr-Yang`
Title: MySQL事务与锁

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/507836/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

  • python中set()函数的用法

    set() 函数创建一个无序不重复元素集,可进行关系测试,删除重复数据,还可以计算交集、差集、并集等。 set([iterable]) iterable — 可迭代对象…

    数据库 2023年6月11日
    079
  • mysql中all用法和any的用法和内连接和外连接,全外连接,联合查询,自连接

    与子查询配合使用 在all的用法中,有三种 语法:select 列名 from 表名 where 列名 <> all(select 列名 from 表名 where 条…

    数据库 2023年5月24日
    0112
  • MySQL架构

    1_逻辑架构 1.1.连接层 系统(客户端)访问MySQL服务器前,做的第一件事就是 &#x5EFA;&#x7ACB;TCP&#x8FDE;&#x6…

    数据库 2023年5月24日
    0100
  • 计算机网络 | TCP 连接的建立 和 TCP 连接的断开

    TCP 连接的建立过程 一开始,客户端和服务端都处于 close 状态。 先是服务端监听某个端口,此时服务端处于 listen 状态。 这个时候客户端就可以发送连接请求报文了。 第…

    数据库 2023年6月11日
    0126
  • windows环境下nacos集群启动报错-无法启动内嵌的tomcat

    解决办法:使用64位jdk切记不要使用32位。切记不要使用32位。切记不要使用32位。 Original: https://www.cnblogs.com/journeyhch/p…

    数据库 2023年6月11日
    083
  • rm: cannot remove ‘/var/lock/subsys/mysql’: Permission denied

    Lock directory for RedHat / SuSE. lockdir=’/var/lock/subsys’ lock_file_path="$lockdir…

    数据库 2023年6月11日
    067
  • likeshop搭建商城系统,一步到位

    什么是商城系统?商城系统又称在线商城系统,是一个功能完善的在线购物系统,主要为在线销售和在线购物服务。 一般的商城系统运营模式有B2C单商户商城系统,B2B2C多商户商城系统以及S…

    数据库 2023年6月14日
    0147
  • Maven的工作机制

    Maven是 Apache 软件基金会组织维护的一款专门为 Java 项目提供 构建和 依赖管理支持的工具。 ·首先, Maven核心程序:负责Maven的总体调度,具体操作使用的…

    数据库 2023年6月16日
    078
  • 数组

    1. 数组概述 数组(array): 存储一个元素个数固定且元素类型相同的有序集 2. 数组的定义格式 格式一 数据类型[] 变量名 int[] array; –>推荐 格…

    数据库 2023年6月14日
    085
  • XPath和Selenium的使用

    XPath 是一门在 XML 文档中查找信息的语言 /: ——># 从根节点选取: //: ——># 不管位置,直接找 /@属性名 ——># 获取对应属性值 /t…

    数据库 2023年6月9日
    075
  • 20 行代码!带你快速构建基础文本搜索引擎 ⛵

    💡 作者:韩信子@ShowMeAI📘 机器学习实战系列:https://www.showmeai.tech/tutorials/41📘 深度学习实战系列:https://www.s…

    数据库 2023年6月14日
    082
  • Spring Security OAuth 笔记

    1 单点登录 关于单点登录的原理,我觉得下面这位老哥讲的比较清楚,有兴趣可以看一下,下面我把其中的重点在此做个笔记总结 https://juejin.cn/post/6844904…

    数据库 2023年6月14日
    082
  • MySQL源码分析之SQL函数执行

    1.MySQL中执行一条SQL的总体流程 2.SQL函数执行过程 1.MySQL中执行一条SQL的总体流程 一条包含函数的SQL语句,在mysql中会经过: &#x5BA2…

    数据库 2023年5月24日
    099
  • 自定义 systemd service

    Red Hat Linux 自 7 版本后 采用systemd 形式取代原先 init ,用户可以参考 系统service 创建自己的service ,以便于日常统一管理,系统se…

    数据库 2023年6月15日
    085
  • spring-boot-starter-actuator

    使用: HTTP方法 路径 描述 鉴权 GET /autoconfig 查看自动配置的使用情况 true GET /configprops 查看配置属性,包括默认配置 true G…

    数据库 2023年6月16日
    083
  • MySQL数据库索引介绍

    一、什么是索引 索引是mysql数据库中的一种数据结构,就是一种数据的组织方式,这种数据结构又称为key 表中的一行行数据按照索引规定的结构组织成了一种树型结构,该树叫B+树 二、…

    数据库 2023年5月24日
    070
亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球