IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 大数据 -> MySQL事务 -> 正文阅读

[大数据]MySQL事务

MySql的事务

MySQL连接过程

客户端发起请求

MySQL主线程把客户端fd添加到select里

select选择适当时候接受clientfd

MySQL分配连接线程去处理客户端请求

子线程任务:循环读取sql语句,执行语句

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-k6qCtXZ4-1652670601625)(C:\Users\8208191402\AppData\Roaming\Typora\typora-user-images\image-20220403142340798.png)]

事务的目的

数据库需要数据的完整性(约束;主键,自增,外键,触发器)

确保数据库从一个一致性状态转换到另一个一致性状态,确保数据库完整性。

事务的特性(ACID)

原子性A:一系列操作序列,要么都做(commit),要么都不做(rollback)。

一致性C:一致性检测(完整性约束检测),数据库需要数据的完整性(约束;主键,自增,外键,触发器)

一致性是其他三个特性共同来维持的

隔离性I:

描述:(各个事务之间的影响程度)(锁粒度)

目的:当多个事务访问同一资源,限制各事务对该资源的访问行为。

策略:写加锁,读不加,采用版本机制(MVCC,每行数据有一个版本)

作用:在一定程度破坏一致性的前提下,提高MySQL性能

隔离级别:

1.最高:可串行,读写都加锁(serializable),不会影响一致性,下面的都会一定程度影响一致性

2.其次:repeatable read,可重复读,读采用MVCC,写加锁。幻读问题

MVCC采用读取事务开始之前的版本。(在事务过程中,其他事务对记录的修改不会被本事务读取到)

快照读:读取事务开始之前的版本,而且事务内部不会修改记录。

当前读,随着事务内部sql语句的执行,读取被当前事务修改的记录数据。

3.再次:read committed,读已提交,读采用MVCC,写加锁,不可重复读,幻读问题

MVCC采用读取事务最新的版本。(事务内sql1和sql2之间,被事务外sql3修改了记录,sql2读取sql3修改后的记录)

4.read uncommitted,读未提交,读不加锁,写加锁,不采用MVCC,脏读,不可重复读,幻读问题

并发读异常

脏读:读到了其他事务还没提交的数据,

原因:没有用MVCC,只有在DML执行完才会产生版本号。

事务内的每条sql语句,在不使用存储过程的情况下,相当于在网络上走了一个来回。

主数据库使用rr,从数据库用ru提高效率。

不可重复读

隔离级别:读已提交

一个读操作和一个写操作造成的:一个事务读到另一个事务已经commit的数据。

某一行数据两次读,结果不一致。(事务对数据进行update)

执行序列实例

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-bkOlCUGB-1652670601627)(C:\Users\8208191402\AppData\Roaming\Typora\typora-user-images\image-20220403160254175.png)]

幻读

隔离级别:可重复读

两次查询得到的结果集合不一致(事务对数据进行delete和insert)

数量不一致:删除/插入

内容不一致:先插入再删除

执行序列实例

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-TtXU1784-1652670601628)(C:\Users\8208191402\AppData\Roaming\Typora\typora-user-images\image-20220403160503806.png)]

总结:

不可重复读和幻读都是其他事务对本事务操作数据进行修改导致的。

1.隔离级别

读已提交:MVCC,读取最新版本

可重复读:MVCC,快照读,读取事务之前的版本

2.出现的范围

不可重复读:一行记录

幻读:结果集

3.原因

不可重复读:update

幻读:delete,insert

4.解决:

不可重复读:提高隔离级别即可解决。

幻读:把快照读(MVCC来实现)改成当前读(给读加锁实现)。

select * from table where ... for update;  加读锁
select * from table where ... lock in share mode;	加写锁

手动加锁,就是当前读

insert into ... values ...  虽然是插入语句,但是要先找到插入的位置,还是包含了读操作
update ... set ... ... where ...
delete from where 

快照读转当前读,就是在select语句后面加上lock in share mode;读锁即可

持久性D:落盘,系统重新加载时,可以获取之前的事务提交记录和数据变更。

并发死锁

前提:并发,采用连接池 或 多个server发起MySQL连接时

在这里插入图片描述

在这里插入图片描述

S锁:若事务T对数据对象A加上S锁,则事务T可以读A但不能修改A,其他事务只能再对A加S锁,而不能加X锁,直到T释放A上的S锁。

这保证了其他事务可以读A,但在T释放A上的S锁之前不能对A做任何修改。

X锁:若事务T对数据对象A加上X锁,事务T可以读A也可以修改A,其他事务不能再对A加任何锁,直到T释放A上的锁。

这保证了其他事务在T释放A上的锁之前不能再读取和修改A。

AI锁:自增锁。

在这里插入图片描述

第二种多出现在RR隔离级别下(引入间隙锁)

集群方案

mysql:分库分表,MyCat,介于server和MySQL server之间的代理。

在这里插入图片描述

难以管理

引出NewSQL:分布式关系型数据库。

组成:分布式系统(便于横向扩展) + 关系型sql + 分布式事务XA

关系型数据库的两种用途:OLAP(在线业务分析),OLTP(在线业务处理)(用到XA)

QL server之间的代理。

[外链图片转存中…(img-4ExF534t-1652670601631)]

难以管理

引出NewSQL:分布式关系型数据库。

组成:分布式系统(便于横向扩展) + 关系型sql + 分布式事务XA

关系型数据库的两种用途:OLAP(在线业务分析),OLTP(在线业务处理)(用到XA)

  大数据 最新文章
实现Kafka至少消费一次
亚马逊云科技:还在苦于ETL?Zero ETL的时代
初探MapReduce
【SpringBoot框架篇】32.基于注解+redis实现
Elasticsearch:如何减少 Elasticsearch 集
Go redis操作
Redis面试题
专题五 Redis高并发场景
基于GBase8s和Calcite的多数据源查询
Redis——底层数据结构原理
上一篇文章      下一篇文章      查看所有文章
加:2022-05-18 17:42:19  更:2022-05-18 17:43:41 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/23 20:14:06-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码