本地事物的简介

2019独角兽企业重金招聘Python工程师标准>>> hot3.png

此章带大家回顾下本地事物的一些内容。标题 2

事物:

有一组操作构成的可靠,独立的工作单元----百度百科

164233_qkZY_2286631.png

事物的四大特性:

A:原子性(Atomicity)事务是数据库的逻辑工作单位,事务中包括的诸操作要么全做,要么全不做。
B:一致性(Consistency)事务执行的结果必须是使数据库从一个一致性状态变到另一个一致性状态。一致性与原子性是密切相关的。
C:隔离性(Isolation)一个事务的执行不能被其他事务干扰。
D:持续性/永久性(Durability)一个事务一旦提交,它对数据库中数据的改变就应该是永久性的。

以上介绍完事务的四大特性(简称ACID),现在重点来说明下事务的隔离性,当多个线程都开启事务操作数据库中的数据时,数据库系统要能进行隔离操作,以保证各个线程获取数据的准确性,在介绍数据库提供的各种隔离级别之前,我们先看看如果不考虑事务的隔离性,会发生的几种问题:

164734_mXN3_2286631.png

不可重复读

不可重复读的重点是修改:

同样的条件, 你读取过的数据, 再次读取出来发现值不一样了

例子:

在事务1中,Mary 读取了自己的工资为1000,操作并没有完成 

con1 = getConnection();  
select salary from employee empId ="Mary";  

在事务2中,这时财务人员修改了Mary的工资为2000,并提交了事务. 

con2 = getConnection();  
update employee set salary = 2000;  
con2.commit();  

在事务1中,Mary 再次读取自己的工资时,工资变为了2000 

//con1  
select salary from employee empId ="Mary";  


在一个事务中前后两次读取的结果并不致,导致了不可重复读。

 

 

幻读

幻读的重点在于新增或者删除

同样的条件, 第1次和第2次读出来的记录数不一样

例子:

目前工资为1000的员工有10人。 
事务1,读取所有工资为1000的员工。 

con1 = getConnection();  
Select * from employee where salary =1000;  

共读取10条记录 

这时另一个事务向employee表插入了一条员工记录,工资也为1000 

con2 = getConnection();  
Insert into employee(empId,salary) values("Lili",1000);  
con2.commit();  


事务1再次读取所有工资为1000的员工 

//con1  
select * from employee where salary =1000;  


共读取到了11条记录,这就产生了幻像读。 

 

事物的隔离级别:

现在来看看MySQL数据库为我们提供的四种隔离级别:

  ① Serializable (串行化):可避免脏读、不可重复读、幻读的发生。

  ② Repeatable read (可重复读):可避免脏读、不可重复读的发生。

  ③ Read committed (读已提交):可避免脏读的发生。

  ④ Read uncommitted (读未提交):最低级别,任何情况都无法保证。

  以上四种隔离级别最高的是Serializable级别,最低的是Read uncommitted级别,当然级别越高,执行效率就越低。像Serializable这样的级别,就是以锁表的方式(类似于Java多线程中的锁)使得其他的线程只能在锁外等待,所以平时选用何种隔离级别应该根据实际情况。在MySQL数据库中默认的隔离级别为Repeatable read (可重复读)。

  在MySQL数据库中,支持上面四种隔离级别,默认的为Repeatable read (可重复读);而在Oracle数据库中,只支持Serializable (串行化)级别和Read committed (读已提交)这两种级别,其中默认的为Read committed级别。

  在MySQL数据库中查看当前事务的隔离级别:

select @@tx_isolation;

  在MySQL数据库中设置事务的隔离 级别:

set  [glogal | session]  transaction isolation level 隔离级别名称;set tx_isolation=’隔离级别名称;’

 

 

本地事物的局限性:

164937_fIpN_2286631.png

如何修复事物的局限性解决微服务问题?

    1:单数据源局限性思考

    既然一个事物只能操作一个数据源,那么我们能否新建多个事物,分别操作多个数据源,最后通过一个统一的”事物管理器”进行统一管理以及提交呢?

    2:单进程局限性思考

既然一个事物只能对一个线程进行管理,那么我们能否新建多个事物,分别操作多个线程,最后通过一个统一的”事物管理器”进行统一管理以及提交呢?

  3:高并发下效率低局限性思考

 既然事物执行效率低,那么能否把事物的执行丢到一个异步线程里面执行,这样主线程就不会受事物的影响了。

那就带着,我们自己思考的解决方案,正式进入分布式方案的讲解吧。

 

 /**
*   ————————如果觉得本博文还行,别忘了推荐一下哦,谢谢!
*   作者:写程序的奥特曼
*   欢迎转载,请保留此段声明。
*   出处:https://my.oschina.net/u/2286631/blog/1504647
*/

转载于:https://my.oschina.net/u/2286631/blog/1504647

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

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

相关文章

dbms数据库管理系统_DBMS中的数据库语言

dbms数据库管理系统DBMS数据库语言 (DBMS Database languages ) Database languages are the languages that provide the facility to specify the database schema and to express database queries and updates. They are further divided into four categories but all are…

物联网计算机相关专业吗,物联网工程属于计算机专业吗

励志语录(7qianxun.com)不是,物联网工程本身就是一个专业,属于工学范畴。本专业学生要具有较好的数学和物理基础,掌握物联网的相关理论和应用设计方法,具有较强的计算机技术和电子信息技术的能力。物联网工程专业就业前景怎么样教育装备网、物联网是继计…

第一个错误的版本_寻找第一个错误的版本

第一个错误的版本Problem statement: 问题陈述: Suppose that IncludeHelp turns to be a product company & we have a product manager leading a team to develop a new product. Unfortunately, the latest version of our product fails the quality chec…

js的JSON

把任何JavaScript对象变成JSON,就是把这个对象序列化成一个JSON格式的字符串,这样才能够通过网络传递给其他计算机。 如果我们收到一个JSON格式的字符串,只需要把它反序列化成一个JavaScript对象,就可以在JavaScript中直接使用这个…

软件可用性测试mantis,学生选课系统-软件可用性测试实验.doc

学生选课系统-软件可用性测试实验实验报告课程名称:软件测试方法和技术学生姓名:学号:院系:计算机 班级:1202 组别:1任课教师:张建东 指导老师:张建东目录一、实验目的:实…

Web 通信 之 长连接、长轮询(long polling)

基于HTTP的长连接,是一种通过长轮询方式实现"服务器推"的技术,它弥补了HTTP简单的请求应答模式的不足,极大地增强了程序的实时性和交互性。 一、什么是长连接、长轮询? 用通俗易懂的话来说,就是客户端不停的向服务器发送请求以获取最新的数据信…

scala中捕获异常_如何在Scala中引发异常?

scala中捕获异常Scala的例外 (Exceptions in Scala) Exceptions are cases or events that occur in the program at run time and hinder the regular flow of execution of the program. These can be handled in the program itself. 例外是在运行时在程序中发生并阻碍程序…

计算机如何输入ip地址,电脑如何切换ip地址_怎么让电脑切换ip地址-win7之家

在每台电脑中,系统中的ip协议都会有提供一种统一的ip地址,能够为为互联网上的每一个网络和每一台主机分配一个逻辑地址,从而达到屏蔽物理地址的差异,同时我们也可以对ip地址进行切换,那么电脑如何切换ip地址呢&#xf…

java线程和操作系统线程_操作系统中的线程

java线程和操作系统线程线程数 (Threads) A thread is a unit of CPU utilization, which comprises the following parts that are program counter, register set, stack and a thread ID. Generally, it’s well known that the process is heavy weighted which means they…

SQL 强制指定索引加快查询速度

转自:http://blog.csdn.net/qq380107165/article/details/45502641 今天遇到一个查询问题,多加了一个查询参数导致查询超时报黄,经过公司DBA改进,涨姿势了。现在发出来跟大家分享一下!~ 1 SELECT m.* FROM TB_UserSite…

计算机IP地址pin,怎样PIN ip地址

1、用鼠标点击开始——运行(快捷键winR)、弹出【运行】对话框、在窗口中输入cmd,如下图所示。2、单击【确定】按钮、打开命令窗口、如下图所示;3、在命令窗口输入ipconfig/all然后按Enter便可以查看本机IP。如下图所示;4、接下来查看你所需要…

360修复导致服务器,桌面安装360软件修复漏洞补丁导致桌面TC端无法登陆,FC端VNC登陆一键修复显示HDC不可达...

问题描述桌面虚机安装360软件以后打补丁,触发桌面虚机重启以后TC端无法连接到桌面,FC登陆VNC相应的虚拟机通过桌面云修复工具一键修复到33%,提示HDC不可达。告警信息处理过程在360服务器端把华为桌面云的进程加入到360服务器的白名单里面&…

java协变返回类型_Java中的协变返回类型

java协变返回类型协变返回类型 (Covariant return type) The covariant return type is that return type which may vary in parent and child class (or subclass). 协变量返回类型是该返回类型,在父类和子类(或子类)中可能有所不同。 Before JDK5 java does not…

dfs文件服务器访问权限,fastDFS 文件服务器访问

鉴权 token 获取token 由文件服务器管理员分配接口定义上传文件请求 URL:请求方式:GET/POST参数形式:form-data参数:参数名位置类型说明是否必填access_tokenheaderString用户 token是fileurlMultipartFile文件是返回:…

CCFL的完整形式是什么?

CCFL:冷阴极荧光灯 (CCFL: Cold Cathode Fluorescent Lamp) CCFL is an abbreviation of a "Cold Cathode Fluorescent Lamp". CCFL是“冷阴极荧光灯”的缩写。 It is a lighting system lamp that contains cathode that discharges electrons and it …

ffmpeg 纯静态编译,以及添加自定义库流程摘要

需求: 1. 纯静态编译ffmpeg ,即ldd ./ffmpeg 的结果是:not a dynamic executable2. 修改ffmpeg 项目,添加自定义功能库3. 自定义库由c实现,要求能被纯c的ffmpeg项目调用4. 自定义库必须使用g 的一些高级特性编译,要求…

vue ani_ANI的完整形式是什么?

vue aniANI:自动号码识别 (ANI: Automatic Number Identification) ANI is an abbreviation of "Automatic number identification". ANI是“自动号码识别”的缩写 。 It is an attribute of a network of telecommunications for involuntarily finding…

realme系统服务器代码,解锁BL之后,Realme正式开放源代码

集微网8月30日消息(文/数码控),此前Realme已经开放了解锁BootLoader(简称BL),现在官方更进一步,直接将Realme X、Realme X青春版的源代码开放了。可能有的人不知道解锁BL与开放源代码是什么意思,我们在此来说明一下:Bo…

Codeforces 757B - Bash's Big Day(分解因子+hashing)

757B - Bashs Big Day 思路&#xff1a;筛法。将所有因子个数求出&#xff0c;答案就是最大的因子个数&#xff0c;注意全为1的特殊情况。 代码&#xff1a; #include<bits/stdc.h> using namespace std; #define ll long long #define pb push_back const int N1e55; in…

JavaScript中的const

const (const) Like other programming languages, JavaScript also provide the feature to create constants, we can make any identifier as constant by using the "const". 与其他编程语言一样&#xff0c;JavaScript也提供了创建常量的功能&#xff0c;我们可…