MySQL 事务与锁

事务ACID特性

原子性:事务要么同时成功,要么同时失败,事务的原子性通过undo log日志保证

一致性:业务代码要抛出报错,让数据库回滚

隔离性:事务并发执行时,他们内部操作不能互相干扰

持久性:事务一旦提交,对数据库的改变就是永久性的。通过redo log日志保证

隔离性

InnoDB引擎中的隔离机制的通过MySQL的锁和MVCC机制实现,提供四种隔离级别,越高隔离性越好,分别是读未提交(脏读)、读已提交(不可重复读)、可重复读(赃写)、串行

读取未提交:所有事务都可以看到其他未提交事务的执行结果。

脏读:是某一事务A读取到了事务B修改未提交的数据。

读以提交 :一个事务只能看见已经提交事务所做的改变。

解决:解决读未提交事务A修改数据,事务B读取数据,事务B读取的数据是原始数据(不是事务A修改后的数据。

不可重复读:在一个事务内,多次读取同一个数据,却返回了不同的结果,有其他事务对这段数据进行了修改并提交。
 

可重读:事务读取数据只会读到访问数据第一个版本的数据。

解决:事务A多次查看数据中事务B读取数据提交,数据是最初打开事务看到的数据。

赃写:事务A查看数据永远是第一次查看的数据,事务B修改数据+500,事务A修改数据+200,就会覆盖之前修改的数据。
可重读带来的脏写的解决方案:乐观锁,在数据库中修改

可重读的实现机制:通过mvvc机制,会记录当版本的数据。

可串行:事务会等待其他事务执行结束,否则会阻塞。
解决:脏读、不可重复度、赃写。

持久性

Buffer Pool内存写完了,会写redo log 日志记录在那个表修改了什么。

即便MySQL挂了,我们还可以根据redo log 对数据进行恢复。

redo log是顺序写的,写入速度很块,恢复速度也快。

MySQL的事务ACID特性有哪些?

原子性、一致性、隔离性、持久性

原子性:事务要么同时成功,要么同时失败,事务的原子性通过undo log日志保证

一致性:业务代码要抛出报错,让数据库回滚

隔离性:事务并发执行时,他们内部操作不能互相干扰

持久性:事务一旦提交,对数据库的改变就是永久性的。通过redo log日志保证

InnoDB引擎中的隔离机制有哪些?

读未提交、读已提交、可重读、串行化

InnoDB引擎中的隔离机制是如何实现的?

InnoDB引擎中的隔离机制的通过MySQL的锁和MVCC机制实现

读未提交是什么?带来什么问题?

读未提交是事务可以读取到其他事务修改还未提交的数据。

会带脏读的问题,读取到其他事务修改未提交的数据,然后其他事务回滚,就会导致读取的数据和数据库不一致。

读以提交是什么?解决什么问题?带来什么问题?

读已提交只能读到其他事务已提交的数据。

可能会带来不重复读问题,读取几次间隔,其他多个事务修改提交。

可重读是什么?解决什么问题?带来什么问题?

可重读是多次读取数据只能读到数据第一个版本。

解决了读已提交带来的不可重读问题。

可能带来赃写问题,多个事务回去数据修改,会覆盖之前的修改结果。
可重读可以用乐观锁等方式解决。

可串行是什么?解决什么问题?带来什么问题?

隔离机制可穿行是事务操作数据会等到其他事务操作完成,

解决了脏读,不可重读,赃写问题,但是在高并发的时候会影响性能。

查询数据需要使用事务吗?

如果是可重读事务隔离性,保证所有数据的都是同时性。

对并发性比较高使用读以提交隔离级别。

传统公司使用读以提交隔离级别

为什么要写先到redo日志中?

redo日志是一个文件是按照磁盘顺序写的,速度快。

磁盘文件idb是多个文件在磁盘的不同位置,实现不了磁盘顺序写。

三大范式

 事务与锁

事务ACID特性

原子性:事务要么同时成功,要么同时失败,事务的原子性通过undo log日志保证

一致性:业务代码要抛出报错,让数据库回滚

隔离性:事务并发执行时,他们内部操作不能互相干扰

持久性:事务一旦提交,对数据库的改变就是永久性的。通过redo log日志保证

原子性

一致性

隔离性

InnoDB引擎中的隔离机制的通过MySQL的锁和MVCC机制实现,提供四种隔离级别,越高隔离性越好。

读未提交:脏读

读已提交:不可重复读

可重复读:赃写

串行:

MySQL设置、查看隔离级别 

read-uncommitted
read-committed
repeatable read
serializable-- 如何查看事务隔离
SELECT @@global.transaction_isolation;
-- 设置事务隔离性
set global transaction isolation level 隔离性

读取未提交

读取未提交:所有事务都可以看到其他未提交事务的执行结果

带来的问题:脏读是某一事务A读取到了事务B未提交的数据。

脏读情况:事务A修改数据,事务B读取数据,事务A回滚数据,则会导致事务B读取的是脏数据。

读以提交 

读以提交 :一个事务只能看见已经提交事务所做的改变。

解决:解决读未提交事务A修改数据,事务B读取数据,事务B读取的数据是原始数据(不是事务A修改后的数据。

带来的问题:不可重复读:在一个事务内,多次读取同一个数据,却返回了不同的结果。

因为在该事务间隔读取数据的期间,有其他事务对这段数据进行了修改并提交

可重读

不可重复读:在一个事务内,多次读取同一个数据,却返回了不同的结果。

因为在该事务间隔读取数据的期间,有其他事务对这段数据进行了修改并提交

解决:事务A多次查看数据中事务B读取数据提交,数据是最初打开事务看到的数据。

带来的问题:事务A查看数据永远是第一次查看的数据,事务B修改数据+500,事务A修改数据+200,就会覆盖之前修改的数据。

可重读的实现机制

可重读带来的脏写的解决方案:乐观锁

事务A获取数据 0,事务B修改数据 +100,事务A修改数据 +200,会覆盖事物B修改的数据。

BEGIN;
update account set blance=blance+100 where id=1 and version=2;update account set version=2 where id=1 ;
COMMIT;代码修改
判断获取的版本是第一版本才修改。
update account set blance=blance+200 where id=1 and version=1;

可重读带来的脏写的解决方案:在数据库中修改

在数据库修改数据获得最新的数据。

只限于这一张表。

可串行化

-- 事务一
BEGIN;
SELECT * FROM account WHERE id=1;
COMMIT;-- 事务二
BEGIN;
UPDATE  account SET balance=balance+500 WHERE id=1;
COMMIT;

持久性

Buffer Pool内存写完了,然后会写redo log,redo log 日志记录在那个表修改了什么。

即便MySQL挂了,我们还可以根据redo log 对数据进行恢复。

redo log是顺序写的,写入速度很块,恢复速度也快。

MySQL的事务ACID特性有哪些?

InnoDB引擎中的隔离机制有哪些?

查询数据需要使用事务吗?

如果是可重读事务隔离性,保证所有数据的都是同时性。

对并发性比较高使用RC隔离级别。

传统公司使用RR隔离级别

为什么要写先到redo日志中?

redo日志是按照磁盘顺序写

磁盘文件idb是多个文件在磁盘的不同位置,实现不了磁盘顺序写。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/378947.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

数据分析01——系统认识数据分析

1.数据分析的全貌 1.1观测 1.1.1 观察 (1)采集数据 a.采集数据:解析系统日志 当你在看视频的时候———就会产生日志———解析日志———得到数据 b.采集数据:埋点获取新数据(自定义记录新的信息) 日志…

JavaScript学习笔记(九)

56、JavaScript 类 56.1 JavaScript 类的语法 请使用关键字 class 创建一个类。 请始终添加一个名为 constructor() 的方法。 JavaScript 类不是对象。 它是 JavaScript 对象的模板。 语法: class ClassName {constructor() { ... } }示例:例子创…

【学习笔记】无人机(UAV)在3GPP系统中的增强支持(六)-人工智能控制的自主无人机用例

引言 本文是3GPP TR 22.829 V17.1.0技术报告,专注于无人机(UAV)在3GPP系统中的增强支持。文章提出了多个无人机应用场景,分析了相应的能力要求,并建议了新的服务级别要求和关键性能指标(KPIs)。…

MongoDB教程(六):mongoDB复制副本集

💝💝💝首先,欢迎各位来到我的博客,很高兴能够在这里和您见面!希望您在这里不仅可以有所收获,同时也能感受到一份轻松欢乐的氛围,祝你生活愉快! 文章目录 引言一、MongoD…

在 vite+vue3+electron 中使用 express

文章目录 一、Vite Vue3 Electron 项目的搭建二、搭建 express 环境1、安装 express 框架所需依赖2、创建 express 项目3、配置路由4、启动 express 服务5、启动 electron 并获取数据 三、项目打包 一、Vite Vue3 Electron 项目的搭建 详细的项目构建和打包可参考另一篇文…

c语言 Program to print pyramid pattern (打印金字塔图案的程序)

编写程序打印由星星组成的金字塔图案 例子 : 输入:n 6输出: * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * 我们强烈建…

MATLAB科研数据可视化教程

原文链接:MATLAB科研数据可视化https://mp.weixin.qq.com/s?__bizMzUzNTczMDMxMg&mid2247609462&idx3&snf7043936fc5ee42b833c7c9f3bcd24ba&chksmfa826d91cdf5e4872eb275e5319b66ba6927ea0074fb2293fe1ca47d6aedf38ab91050be484c&token1551213…

k8s集群 安装配置 Prometheus+grafana

k8s集群 安装配置 Prometheusgrafana k8s环境如下:机器规划: node-exporter组件安装和配置安装node-exporter通过node-exporter采集数据显示192.168.40.180主机cpu的使用情况显示192.168.40.180主机负载使用情况 Prometheus server安装和配置创建sa账号&…

Redis中数据分片与分片策略

概述 数据分片是一种将数据分割并存储在多个节点上的技术,可以有效提高系统的扩展性和性能。在Redis中,数据分片主要用于解决单个实例存储容量和性能瓶颈的问题。通过将数据分散存储到多个Redis节点中,可以将负载均衡到不同的服务器上&#…

ArcGIS Enterprise 命令行组件创建配置

1. 创建ArcGIS Server站点 使用 createsite工具 命令行直接执行 createsite.sh [-u <arg>] [-p <arg>] [-d <arg>] [-c <arg>]执行文件 createsite.sh [-f <FILE>]安装目录下会有类似的创建站点文件&#xff1a; 修改其中的内容&#xff0c;…

芯片基础 | Verilog结构级描述和操作符(上)

术语定义(Terms and Definitions) 结构描述(Structural Modeling) 用门及门的连接描述器件的功能基本单元(primitives原语) Verilog语言已定义的具有简单逻辑功能的功能模型(models)结构描述 结构描述等价于逻辑图,它们都是连接简单元件来构成更为复杂的元件;Verilog使用其连接…

PDF小工具poppler

1. 简介 介绍一下一个不错的PDF库poppler。poppler的官网地址在:https://poppler.freedesktop.org/ 它是一个PDF的渲染库,顾名思义,它的用途就是读取PDF文件,然后显示到屏幕(显示到屏幕上只是一种最狭义的应用,包括使用Windows上的GDI技术显示文件内容,当然可以渲染到…

智慧水利:迈向水资源管理的新时代,结合物联网、云计算等先进技术,阐述智慧水利解决方案在提升水灾害防控能力、优化水资源配置中的关键作用

本文关键词&#xff1a;智慧水利、智慧水利工程、智慧水利发展前景、智慧水利技术、智慧水利信息化系统、智慧水利解决方案、数字水利和智慧水利、数字水利工程、数字水利建设、数字水利概念、人水和协、智慧水库、智慧水库管理平台、智慧水库建设方案、智慧水库解决方案、智慧…

海外社媒矩阵为何会被关联?如何IP隔离?

在当今的数字时代&#xff0c;社交媒体已经成为人们日常生活中不可或缺的一部分。通过社交媒体&#xff0c;人们可以与朋友互动&#xff0c;分享生活&#xff0c;甚至进行业务推广和营销。然而&#xff0c;社交媒体账号关联问题逐渐受到广泛关注。社交媒体账号为何会关联&#…

C++ | Leetcode C++题解之第239题滑动窗口最大值

题目&#xff1a; 题解&#xff1a; class Solution { public:vector<int> maxSlidingWindow(vector<int>& nums, int k) {int n nums.size();vector<int> prefixMax(n), suffixMax(n);for (int i 0; i < n; i) {if (i % k 0) {prefixMax[i] num…

Oralce笔记-解决Oracle18c中ORA-28001: 口令已经失效

远程已经连不上了&#xff0c;需要登陆到安装Oracle的机器&#xff0c;使用sqlplus直接连。 sqlplus / as sysdba 登陆进去后修改期限为无限制&#xff1a; ALTER PROFILE DEFAULT LIMIT PASSWORD_LIFE_TIME UNLIMITED 对于已经告警提示密码已过期的数据库&#xff0c;需要…

【网络文明】关注网络安全

在这个数字化时代&#xff0c;互联网已成为我们生活中不可或缺的一部分&#xff0c;它极大地便利了我们的学习、工作、娱乐乃至日常生活。然而&#xff0c;随着网络空间的日益扩大&#xff0c;网络安全问题也日益凸显&#xff0c;成为了一个不可忽视的全球性挑战。认识到网络安…

【devops】ttyd 一个web版本的shell工具 | web版本shell工具 | web shell

一、什么是 TTYD ttyd是在web端一个简单的服务器命令行工具 类似我们在云厂商上直接ssh链接我们的服务器输入指令一样 二、安装ttyd 1、macOS Install with Homebrew: brew install ttydInstall with MacPorts: sudo port install ttyd 2、linux Binary version (recommend…

基于AT89C51单片机的多功能自行车测速计程器(含文档、源码与proteus仿真,以及系统详细介绍)

本篇文章论述的是基于AT89C51单片机的多功能自行车测速计程器的详情介绍&#xff0c;如果对您有帮助的话&#xff0c;还请关注一下哦&#xff0c;如果有资源方面的需要可以联系我。 目录 选题背景 原理图 PCB图 仿真图 代码 系统论文 资源下载 选题背景 美丽的夜晚&…

【机器学习入门】拥抱人工智能,从机器学习开始

拥抱人工智能&#xff0c;从机器学习开始 目录&#xff1a; 1. 机器学习&#xff1a;一种实现人工智能的方法 2. 机器学习算法&#xff1a;是使计算机具有智能的关键 3. Anaconda&#xff1a;初学Python、入门机器学习的首选 4. 总结 转载链接&#xff1a; 文章-阿里云开发者社…