MySQL_16.数据库事务相关概念

1.数据库事务
是指作为单个逻辑工作单元执行的系列操作,要么完全执行,要么完全不执行

2.事务的属性
(1)原子性 Atomicity:    原子性是指事务是一个不可分割的工作单位,事务中的操作要么都发生,要么都不发生
(2)一致性 Consistency:    事务前后数据的完整性必须保持一致。
(3)隔离性Isolation:    事务的隔离性是指多个用户并发访问数据库时,一个用户的事务不能被其它用户的事务所干扰,多个并发事务之间数据要相互隔离
(4)持久性Durability:    持久性是指一个事务一旦被提交,它对数据库中数据的改变就是永久性的,接下来即使数据库发生故障也不应该对其有任何影响

3.不考虑事务隔离性出现的问题
(1)脏读:就是一个事务读取到了另一个事务未提交的数据
(2)不可重复读:事务A多次读取同一数据,事务B在事务A多次读取的过程中,对数据作了更新并提交,导致事务A多次读取同一数据时,结果不—致。
(3)幻读:系统管理员A将数据库中所有学生的成绩从具体分数改为 ABCDE 等级,但是系统管理员B就在这个时候插入了一条具体分数的记录,
当系统管理员A改结束后发现还有条记录没有改过来,就好像发生了幻觉一样,这就叫幻读。

4.事务的四种隔离级别

事务隔离级别                 更新丢失        脏读           不可重复读     幻读    
---------------------------------------------------------------------------------
读未提交 Read uncommitted    不会出现       会出现          会出现        会出现
---------------------------------------------------------------------------------
读提交 Read committed        不会出现       不会出现        会出现        会出现
---------------------------------------------------------------------------------
可重复读 Repeatable read     不会出现       不会出现        不会出现      会出现
---------------------------------------------------------------------------------
串行化 Serializable          不会出现       不会出现        不会出现      不会出现
---------------------------------------------------------------------------------

(1)读未提交 Read uncommitted
最低的隔离级别,什么都不需要做,一个事务可以读到另一个事务未提交的结果;所有的并发事务问题都会发生,解决了更新丢失
(2)读已提交 Read committed
只有在事务提交后,其更新结果才会被其他事务看见。解决了更新丢失、脏读
(3)重复读 Repeatable read
在一个事务中,对于同一份数据的读取结果总是相同的,无论是否有其他事务对这份数据进行操作,以及这个事务是否提交。解决了更新丢失、脏读、不可重复读。
(4)串行化 Serializable
事务串行化执行,隔离级别最髙,牺牲了系统的并发性。可以解决并发事务的所有问题。
注:
大多数数据库的默认隔离级别为: Read Commited读已提交 ,如 Oracle,DB2, Sql server。
少数数据库默认的隔离级别为 Repeatable read(可重复读),如 mysql Innodb存储引擎。
因为考虑到数据安全,请使用 Read Commited(读已提交)。


5.管理事务操作
(1)查询数据库事务隔离级别

show global variables like '%tx_isolation%';

(2)设置mysql的隔离级别tx_isolation 参数

set global tx_isolation = 'READ-COMMITTED';            --全局级别
set session tx_isolation = 'READ-COMMITTED';            --会话级别

(3)永久生效需要设置my.cnf参数文件、tx_isolation可选值:

READ-UNCOMMITTED、READ-COMMITTED、REPEATABLE-READ、SERIALIZABLE

(4)INNODB手动执行事务操作命令

start transaction;                           --开启事务
rollback;                                    --回滚事务
savepoint a;                                 --定义当前位置为保存点
rollback to a;                               --回滚至保存点 a
commit;                                      --提交事务


6.mysql事务隔离界别演示
(1)READ-UNCOMMITTED 读未提交
窗口A:

set session tx_isolation = 'READ-UNCOMMITTED';
create table scott.s1 (id int,name varchar(20));
start transaction;
select * from scott.s1;


窗口B:

set session tx_isolation = 'READ-UNCOMMITTED';
start transaction;
select * from scott.s1;


窗口A:

insert into scott.s1 values (1,'s1');        --不提交


窗口B:

select * from scott.s1;


窗口A:

rollback;


窗口B:

select * from scott.s1;


(2)READ-COMMITTED 读提交
窗口A:

set session tx_isolation = 'READ-COMMITTED';
start transaction;
select * from scott.s1;


窗口B:

set session tx_isolation = 'READ-COMMITTED';
start transaction;
select * from scott.s1;


窗口A:

insert into scott.s1 values (1,'s1');         --不提交
select * from scott.s1;


窗口B:

select * from scott.s1;


窗口A:

commit; 


窗口B:

select * from scott.s1;


(3)REPEATABLE-READ 重复读
窗口A:

set session tx_isolation = 'REPEATABLE-READ';
start transaction;
select * from scott.s1;


窗口B:

set session tx_isolation = 'REPEATABLE-READ';
start transaction;
select * from scott.s1;


窗口B:

insert into scott.s1 values (3,'s3');         --不提交
select * from scott.s1;


窗口A:

select * from scott.s1;


窗口B:

commit; 


窗口A:

select * from scott.s1;


窗口A:

commit;


窗口A:

select * from scott.s1;


(4)SERIALIZABLE 串行化
窗口A:

set session tx_isolation = 'SERIALIZABLE';
start transaction;
select * from scott.s1;


窗口B:

set session tx_isolation = 'SERIALIZABLE';
start transaction;
select * from scott.s1;


窗口B:

insert into scott.s1 values (4,'s4');         --不提交
select * from scott.s1;


窗口A:

select * from scott.s1; 


窗口B:

commit;


窗口A:

select * from scott.s1; 
commit;


 

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

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

相关文章

【数据库设计和SQL基础语法】--事务和并发控制--事务的概念和特性

一、SQL事务基础 在数据库管理系统(DBMS)中,事务是指一个或一组数据库操作的执行单元,它被视为一个不可分割的工作单位。事务的目的是要确保数据库的完整性和一致性,即使在发生故障或错误的情况下也能保持数据的一致性…

【【IIC模块Verilog实现---用IIC协议从FPGA端读取E2PROM】】

IIC模块Verilog实现–用IIC协议从FPGA端读取E2PROM 下面是 design 设计 I2C_dri.v module IIC_CONTROL #(parameter SLAVE_ADDR 7b1010000 , // E2PROM 从机地址parameter CLK_FREQ 26d50_000_000 , // 50MHz 的时钟频率parameter …

《负责任研究行为规范指引(2023)》发布:引领科学研究的道德与规范

《负责任研究行为规范指引(2023)》发布:引领科学研究的道德与规范 公众号回复关键词:道德规范 获取《负责任研究行为规范指引(2023)》原文。 在科技迅速发展的当下,负责任的科学研究行为对于推…

Ensp dhcp全局地址池(配置命令 + 实例)

使用DHCP的好处:减少管理员的工作量、避免输入错误的可能、避免ip冲突 DHCP报文类型: DHCP DISCOVER:客户端用来寻找DHCP服务器 DHCP OFFER:DHCP服务器用来响应DHCP DISCOVER报文,此报文携带了各种配置信息 DHCP REQUEST:客户端配置请求确…

Python机器学习 – 用最小二乘法实现散点图

Python机器学习 – 用最小二乘法实现散点图 Machine Learning in Python – Implement Scatter Plot with Least Squares By JacksonML 1. 最小二乘法定义 最小二乘法是由A.M.Legendre(勒让德)先生最早提出的。他在1805年,通过《计算彗星轨…

k8s中的pod及创建pod的方式

1. 什么是pod? 在 Kubernetes(K8s)中,Pod 是最小的可部署单元,它是容器的一种抽象层级。通俗地说,Pod 就像是一个运行在 Kubernetes 上的应用程序实例,但实际上,Pod 有一些特殊之处。 让我们…

3. 结构型模式 - 组合模式

亦称: 对象树、Object Tree、Composite 意图 组合模式是一种结构型设计模式, 你可以使用它将对象组合成树状结构, 并且能像使用独立对象一样使用它们 问题 如果应用的核心模型能用树状结构表示, 在应用中使用组合模式才有价值。 …

ISP 状态机轮转和bubble恢复机制学习笔记

1 ISP的中断类型 ISP中断类型 SOF: 一帧图像数据开始传输 EOF: 一帧图像数据传输完成 REG_UPDATE: ISP寄存器更新完成(每个reg group都有独立的这个中断) EPOCH: ISP某一行结尾(默认20)就会产生此中断 BUFFER DONE: 一帧图像数据ISP完全写到DDR了 2 ISP驱动状态机 通过camer…

三菱PLC开关量防抖滤波功能块

开关量防抖滤波功能块梯形图和SCL代码请参考下面文章链接: https://rxxw-control.blog.csdn.net/article/details/134936233https://rxxw-control.blog.csdn.net/article/details/134936233三菱PLC防抖滤波的另一种写法如下 https://rxxw-control.blog.csdn.net/article/det…

不同领域环境中的“组分分析”

组分分析在不同的学术领域和应用场景中可能有不同的含义,但通常它指的是一种分析方法,用于识别和量化一个复杂系统、样本或信号中的各个组成部分。 1. **化学组分分析**: 在化学领域,组分分析通常指的是识别和量化化学样品中各…

用CHAT了解更多知识点

问CHAT:什么是硅基生命和碳基生命? CHAT回复:硅基生命和碳基生命是两种理论性的生物体类型,这些生物体主要是由硅或碳元素以及其他元素构成的。 碳基生命是我们当前所熟知的生命形式。碳元素能够形成稳定且复杂的分子,…

推荐几款非常好用的软件,干货满满!

作为一个工具控,一直在社区索取别人的营养,今天在下将我搜集的一些应用贡献出来,推介十几个我常用的软件。一些是其他人反复推介确实经典,另一些是我偶然发现但经过使用感觉非常好用,一并献上,大家可以根据…

node封装一个图片拼接插件

说在前面 平时我们拼接图片的时候一般都要通过ps或者其他图片处理工具来进行处理合成,这次有个需求就需要进行图片拼接,而且我希望是可以直接使用代码进行拼接,于是就有了这么一个工具包。 插件效果 通过该插件,我们可以将图片进…

Java开发框架和中间件面试题(5)

44.Tomcat一个请求的处理流程? 假设来自客户的请求为: http://localhost:8080/test/index.jsp请求被发送到本机端口8080,被在那里侦听Copote HTTP/1.1 Connector,然后 1.Connector把该请求交给它所在的Service的Engi…

STM32MP157D-DK1开发板Qt镜像构建

上篇介绍了STM32MP57-DK1开发板官方系统的烧录。那个系统包含Linux系统的基础功能,如果要进行Qt开发,还需要重新构建带有Qt功能的镜像 本篇就来介绍如何构建带有Qt功能的系统镜像,并在开发板中烧录构建的镜像。 1 Distribution包的构建 ST…

每日一水:leetcode1576.替换所有的问号

题目: 给你一个仅包含小写英文字母和 ? 字符的字符串 s,请你将所有的 ? 转换为若干小写字母,使最终的字符串不包含任何 连续重复 的字符。 注意:你 不能 修改非 ? 字符。 题目测试用例保证 除 ? 字符 之外,不存…

[C/C++]数据结构 希尔排序

🥦前言: 希尔排序也称 “缩小增量排序”,它也是一种插入类排序的方法,在学习希尔排序之前我们首先了解一下直接插入排序. 一: 🚩直接插入排序 1.1 🌟排序思路 直接插入排序的基本原理是将一条记录插入到已排好的有序表中&#x…

【经典LeetCode算法题目专栏分类】【第11期】递归问题:字母大小写全排列、括号生成

《博主简介》 小伙伴们好,我是阿旭。专注于人工智能AI、python、计算机视觉相关分享研究。 ✌更多学习资源,可关注公-仲-hao:【阿旭算法与机器学习】,共同学习交流~ 👍感谢小伙伴们点赞、关注! 《------往期经典推荐--…

【C++】STL 容器 - list 双向链表容器 ① ( 容器特点 | 容器操作时间复杂度 | 构造函数 )

文章目录 一、 list 双向链表容器简介1、容器特点2、容器操作时间复杂度3、遍历访问5、头文件 二、 list 双向链表容器 构造函数1、默认无参构造函数2、创建包含 n 个相同元素的 list 双向链表3、使用初始化列表构造 list 双向链表4、使用另外一个 list 容器 构造 list 双向链表…

新概念第二册(1)

【New words and expressions】生词和短语(12) private adj. 私人的 conversation n. 谈话 theatre n. 剧场,戏院 seat n. 座位 play …