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…

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…

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智云物业管理平台微信小程序系统源码

​&#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…

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;各种复杂应…

数字化赋能,加油小程序让出行更便捷高效

在快节奏的现代生活中&#xff0c;每一次加油不仅是车辆续航的必要步骤&#xff0c;也成为了人们日常生活中不可或缺的一环。随着科技的飞速发展&#xff0c;传统加油模式正逐步向智能化、便捷化转型&#xff0c;其中&#xff0c;加油小程序作为这股浪潮中的佼佼者&#xff0c;…

el-date-picker手动输入日期,通过设置开始时间和阶段自动填写结束时间

需求&#xff1a;根据开始时间&#xff0c;通过填写阶段时长&#xff0c;自动填写结束时间&#xff0c;同时开始时间和节数时间可以手动输入 代码如下&#xff1a; <el-form ref"ruleForm2" :rules"rules2" :model"formData" inline label-po…

yolov5 上手

0 介绍 YOLO(You Only Look Once)是一种流行的物体检测和图像分割模型&#xff0c;由华盛顿大学的约瑟夫-雷德蒙&#xff08;Joseph Redmon&#xff09;和阿里-法哈迪&#xff08;Ali Farhadi&#xff09;开发。YOLO 于 2015 年推出&#xff0c;因其高速度和高精确度而迅速受到…

人工智能算法工程师(中级)课程13-神经网络的优化与设计之梯度问题及优化与代码详解

大家好&#xff0c;我是微学AI&#xff0c;今天给大家介绍一下人工智能算法工程师(中级)课程13-神经网络的优化与设计之梯度问题及优化与代码详解。 文章目录 一、引言二、梯度问题1. 梯度爆炸梯度爆炸的概念梯度爆炸的原因梯度爆炸的解决方案 2. 梯度消失梯度消失的概念梯度…

powerdesigner导出表数据库设计文档excel

1、连接数据库&#xff0c;导出表结构的sql脚本 2、打开powerdesigner&#xff0c;生成项目空间表 sql脚本用第一步的脚本 3、用script脚本生成excel 脚本信息 Option Explicit Dim rowsNum rowsNum 0 -------------------------------------------------------------…