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.mzph.cn/web/45518.shtml

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

相关文章

Python 读取esxi上所有主机的设备信息

(主要是为了统计所有虚拟机的设备名称和所属主机) 代码: from pyVim import connect from pyVmomi import vim import ssldef get_vm_devices(vm):devices []try:if vm.config is not None and hasattr(vm.config, hardware) and hasattr(v…

SpringBoot解决Apache Tomcat输入验证错误漏洞

Apache Tomcat是美国阿帕奇(Apache)基金会的一款轻量级Web应用服务器。该程序实现了对Servlet和JavaServer Page(JSP)的支持。 Apache Tomcat存在输入验证错误漏洞,该漏洞源于HTTP/2请求的输入验证不正确,会…

postgresql简单导出数据与手动本地恢复(小型数据库)

问题 需要每天手动备份postgresql。 步骤 导出数据 /opt/homebrew/opt/postgresql16/bin/pg_dump --file/Users/zhangyalin/backup_sql/<IP地址>_pg-2024_07_15_17_30_15-dump.sql --dbname<数据库名> --username<用户名> --host<IP地址> --port54…

Day53:图论 岛屿数量 岛屿的最大面积

99. 岛屿数量 时间限制&#xff1a;1.000S 空间限制&#xff1a;256MB 题目描述 给定一个由 1&#xff08;陆地&#xff09;和 0&#xff08;水&#xff09;组成的矩阵&#xff0c;你需要计算岛屿的数量。岛屿由水平方向或垂直方向上相邻的陆地连接而成&#xff0c;并且四周…

低空经济持续发热,无人机培训考证就业市场及前景剖析

随着科技的不断进步和社会需求的日益增长&#xff0c;低空经济已成为全球及我国经济增长的新引擎。作为低空经济的重要组成部分&#xff0c;无人机技术因其广泛的应用领域和显著的经济效益&#xff0c;受到了社会各界的广泛关注。为满足市场对无人机人才的需求&#xff0c;无人…

深入剖析 Android 开源库 EventBus 的源码详解

文章目录 前言一、EventBus 简介EventBus 三要素EventBus 线程模型 二、EventBus 使用1.添加依赖2.EventBus 基本使用2.1 定义事件类2.2 注册 EventBus2.3 EventBus 发起通知 三、EventBus 源码详解1.Subscribe 注解2.注册事件订阅方法2.1 EventBus 实例2.2 EventBus 注册2.2.1…

梦想CAD在线预览编辑功能

1.最近有个需求&#xff0c;在web系统里进行在线进行CAD预览和编辑&#xff0c;这里用的是梦想CAD实现此功能&#xff0c;梦想CAD官网文档 2.CAD预览&#xff0c;需要需要对CAD文件格式进行转化&#xff0c;将dwg文件格式转化为mxweb格式&#xff0c;再进行调用梦想CAD里的打开…

ipynb转换为pdf、Markdown(.md)

Jupyter Notebook 文件&#xff08;.ipynb&#xff09;可以转换成多种数据格式&#xff0c;以适应不同的使用场景和需求。以下是几种常见的转换格式及其简洁描述&#xff1a; HTML: Jupyter Notebook可以直接导出为静态的网页&#xff08;HTML&#xff09;格式&#xff0c;这样…

记一次IP数据处理过程,文本(CSV文件)处理,IP解析

个人博客&#xff1a;无奈何杨&#xff08;wnhyang&#xff09; 个人语雀&#xff1a;wnhyang 共享语雀&#xff1a;在线知识共享 Github&#xff1a;wnhyang - Overview 起因 突然接收到XX给的任务&#xff0c;要将一批IP数据处理一下&#xff0c;将IP对应的省市区解析出来…

PHP基础语法

PHP 脚本在服务器上执行&#xff0c;然后将纯 HTML 结果发送回浏览器。 基本的 PHP 语法 PHP 脚本可以放在文档中的任何位置。 PHP 脚本以 <?php 开始&#xff0c;以 ?> 结束&#xff1a; <?php // PHP 代码 ?> PHP 文件的默认文件扩展名是 .php。 PHP 文…

PHP智云物业管理平台微信小程序系统源码

​&#x1f3e0;智云物业管理新纪元&#xff01;微信小程序&#xff0c;让家园管理更智慧&#x1f4f1; &#x1f3e1;【开篇&#xff1a;智慧生活&#xff0c;从物业开始】&#x1f3e1; 在快节奏的现代生活中&#xff0c;我们追求的不仅仅是家的温馨&#xff0c;更是生活的…

基于hive数据库的泰坦尼克号幸存者数据分析

进入 ./beeline -u jdbc:hive2://node2:10000 -n root -p 查询 SHOW TABLES; 删除 DROP TABLE IF EXISTS tidanic; 上传数据 hdfs dfs -put train.csv /user/hive/warehouse/mytrain.db/tidanic 《泰坦尼克号幸存者数据分析》 1、原始数据介绍 泰坦尼克号是当时世界上…

达梦数据库系列—28. 主备集群高可用测试

目录 监视器关闭 监视器启动&#xff0c;Detach备库 主备正常&#xff0c;手动switchover 主库故障&#xff0c;自动switchover 主库故障&#xff0c;手动Takeover 主库故障&#xff0c;备库强制takeover 主库重启 备库故障 公网连接异常 主库私网异常 备库私网异常…

实现给Nginx的指定网站开启basic认证——http基本认证

一、问题描述 目前我们配置的网站内容都是没有限制&#xff0c;可以让任何人打开浏览器都能够访问&#xff0c;这样就会存在一个问题&#xff08;可能会存在一些恶意访问的用户进行恶意操作&#xff0c;直接访问到我们的敏感后台路径进行操作&#xff0c;风险就会很大&#xff…

云原生周刊:Score 成为 CNCF 沙箱项目|2024.7.15

开源项目 Trident Trident 是由 NetApp 维护的全面支持的开源项目。它从头开始设计&#xff0c;旨在通过行业标准接口&#xff08;如容器存储接口 CSI&#xff09;帮助您满足容器化应用程序对持久性存储的需求。 Monokle Monokle 通过提供用于编写 YAML 清单、验证策略和管…

浅谈微服务

技术方法论&#xff1a;向微服务迈进&#xff1a; 理论&#xff1a;“软件研发中任何一项技术、方法、架构都不可能是银弹"—Fred Brooks 哪些场景适合用微服务&#xff0c;呢些不适用&#xff1f;&#xff08;微服务存在哪些理解误区、应用前提&#xff09; 一些被验证过…

Why can‘t I access GPT-4 models via API, although GPT-3.5 models work?

题意&#xff1a;为什么我无法通过API访问GPT-4模型&#xff0c;尽管GPT-3.5模型可以工作&#xff1f; 问题背景&#xff1a; Im able to use the gpt-3.5-turbo-0301 model to access the ChatGPT API, but not any of the gpt-4 models. Here is the code I am using to tes…

【雷丰阳-谷粒商城 】【分布式高级篇-微服务架构篇】【22】【RabbitMQ】

持续学习&持续更新中… 守破离 【雷丰阳-谷粒商城 】【分布式高级篇-微服务架构篇】【22】【RabbitMQ】 Message Queue 消息队列异步处理应用解耦流量控制 消息中间件概念RabbitMQ概念MessagePublisherExchangeQueueBindingConnectionChannelConsumerVirtual HostBroker图…

Django prefetch_related()方法

prefetch_related的作用 prefetch_related()是 Django ORM 中用于优化查询性能的另一个重要方法&#xff0c;尤其在处理多对多&#xff08;ManyToMany&#xff09;关系和反向关系时非常有用。它允许你预加载相关对象&#xff0c;从而减少数据库查询次数。 1&#xff0c;创建应…

【香橙派】Orange pi AIpro开发板使用之一键部署springboot项目

前言 最近有幸收到一份新款 OrangePi AIpro 开发板&#xff0c;之前手里也捣鼓过一些板子&#xff0c;这次尝试从零开始部署一个简单的后端服务。OrangePi AIpro 采用昇腾AI技术路线&#xff0c;具体为4核64位处理器AI处理器&#xff0c;可配16GB内存容量&#xff0c;各种复杂应…