SQL事务对并发处理的支持
前言
继上次技术分享后,学到了关于mysql事务的许多新知识,感觉还是蛮有收获的。后来反过来想想,这些东西其实我们都接触过,最起码在自学考试的数据库系统原理那本书里面对事务的讲解,在里面就提到了事务的概念。
内容
1、首先事务本身有四个特性,分别是怎么体现的呢?
定义:
是构成单一逻辑工作单元的操作集合,要么完整地执行,要么完全不进行。
特性(ACID)
| 性质(ACID) | 理解内容 | 由谁来实现 |
| 原子性(Atomicity) | 一个事务对数据库的所有操作,是一个不可分割的工作单元。这些操作要么全部执行,要么什么也不做。 | 由DBMS的事务管理子系统来实现。 |
| 一致性(Consistency) | 一个事务独立执行的结果,应保持数据库的一致性,即数据不会因事务的执行而遭受破坏。 |
由DBMS的完整性子系统执行测试任务。 |
| 隔离性(Isolation) | 在多个事务并发执行时,系统应保证与这些事务先后单独执行时的结果一样。 |
由DBMS的并发控制子系统实现的。 |
| 持久性(Durability) | 一个事务一旦完成全部操作后,它对数据库的所有更新应永久地反映在数据库中,不会丢失。 |
由DBMS的恢复管理子系统实现的。 |
1、数据库的并发控制带来的问题
①
丢失更新
②
读脏数据
③ 不可重复读
2、针对上面的问题,推出了三级封锁协议(X锁、S锁),分别在不同程度上解决了并发操作带来的问题,为并发操作的正确性提供了一定的保证。虽然在不同程度上解决了并发操作带来的问题,但是这种操作很容易造成饿锁、死锁、活锁。
3、所以在后期对事务的存取模式(Access Mode)和隔离级别(Isolation
Level)进行了调整,以控制事务的并发进行。
①
存取模式:
i. READ ONLY(只读型):事务对数据库的操作只能是读操作。
ii.
READ WRITE(读写型):事务对数据库的操作可以是读操作,也可以是写操作。
②
隔离级别(级别从高到低):
i. SERIALIZABLE(可串行化):允许事务与其他事务并发执行,但系统必须保证并发调度是可串行化,不致发生错误。
ii. REPEATABLE READ(可重复读):只允许事务读已提交的数据,并且在两次读同一个数据时不允许其他事务修改此数据。
iii.
READ COMMITTED(读提交数据):允许事务读已提交的数据,但不要求“可重复读”。
iv. READ UNCOMMITTED(可以读未提交数据):允许事务读已提交或未提交的数据。
上述四种级别可以用下列SQL定义:
<span style="font-family:KaiTi_GB2312;font-size:18px;color:#0D0D0D;background:white;">
SET TRANSACTION ISOLATION LEVEL SERIALIZABLE
SET TRANSACTION ISOLATION LEVEL REPEATABLE READ
SET TRANSACTION ISOLATION LEVEL READ COMMITTED
SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED</span>
小结
上面介绍了事务的由来,以及为了解决什么而存在。
感谢您的宝贵时间···
SQL事务对并发处理的支持的更多相关文章
- SQL事务隔离级别
数据库是要被广大客户所共享访问的,那么在数据库操作过程中很可能出现以下几种不确定情况. 更新丢失(Lost update) 两个事务都同时更新一行数据,但是第二个事务却中途失败退出,导致对数据的两个修 ...
- 【概念原理】四种SQL事务隔离级别和事务ACID特性
摘要: SQL事务隔离级别和事务的ACID特性 事务是一组读写操作,并且具有只有所有操作都成功才算成功的特性. 事务隔离级别 SQL事务隔离级别由弱到强分别是:READ_UNCOMMITTED.R ...
- 030.[转] sql事务特性
sql事务特性简介 pphh发布于2018年10月5日 Sql事务有原子性.一致性.隔离性.持久性四个基本特性,要实现完全的ACID事务,是以牺牲事务的吞吐性能作为代价的.在有些应用场景中,通过分析业 ...
- [转帖]微软 SQL Server 2008/R2 停止支持
微软 SQL Server 2008/R2 停止支持 微软停止支持 SQLSERVER 2008R2 https://t.cj.sina.com.cn/articles/view/3172142827 ...
- Mysql - 游标/动态sql/事务
游标这个在我目前的项目里面用的还不多, 但是其功能还是很强大的. 动态sql以前都没用过, 是跟着富士康(不是张全蛋的富土康哦)过来的同事学的. 还是挺好用的. 我的数据库方面, 跟他学了不少. 在此 ...
- SQL汉字转拼音函数-支持首字母、全拼
SQL汉字转拼音函数-支持首字母.全拼 FROM :http://my.oschina.net/ind/blog/191659 作者不详 --方法一sqlserver汉字转拼音首字母 --调用方法 s ...
- 30分钟全面解析-SQL事务+隔离级别+阻塞+死锁
以前总是追求新东西,发现基础才是最重要的,今年主要的目标是精通SQL查询和SQL性能优化. 本系列主要是针对T-SQL的总结. [T-SQL基础]01.单表查询-几道sql查询题 [T-SQL基础] ...
- sql事务(Transaction)用法介绍及回滚实例
sql事务(Transaction)用法介绍及回滚实例 事务(Transaction)是并发控制的单位,是用户定义的一个操作序列.这些操作要么都做,要么都不做,是一个不可分割的工作单位.通过事务, S ...
- sql事务的调用
一.数据库的SQL USE [Text]GO/****** Object: StoredProcedure [dbo].[mon] Script Date: 2017-01-03 15:59:28 * ...
随机推荐
- UEditor富文本编辑器的使用 http://fex.baidu.com/ueditor/
[转] http://fex.baidu.com/ueditor/ UEditor 介绍 UEditor 是由百度「FEX前端研发团队」开发的所见即所得富文本web编辑器,具有轻量,可定制,注重用户体 ...
- 使用 acl 库针对 C++ 对象进行序列化及反序列编程
在开发网络应用程序时,各个模块之间的数据通信可谓是家常便饭,为了应对这些数据通信时数据交换的要求,程序员发明了各种数据格式:采用二进制数据结构(早期 C 程序员).采用 XML.采用SOAP(坑人的设 ...
- Github修改项目显示的语言类型
//仓库的根目录下创建 .gitattributes 文件,添加以下代码: *.js linguist-language=java *.css linguist-language=java *.htm ...
- python爬虫(1)--Urllib库的基本使用
这里使用python2.7,pycharm进行代码编写 1.爬一个静态网页示例 import urllib2 response = urllib2.urlopen("http://www.b ...
- oracle --(二)分区(extent)
基本关系:数据库---表空间---数据段---分区---数据块 一.分区(extent)分区extent是比数据块大一级的存储结构,是几个逻辑上相邻的data block的组合.我们知道,物理存储通常 ...
- CDN原理解析
首先,让我们来看一下传统的Internet网络的基本结构和数据传输情况,如下图所示 根据传统的网络结构,用户的访问流程基本如下: 用户在自己的浏览器中输入要访问的网站的域名 浏览器向本地DNS请求 ...
- day18-事务与连接池 5.关于不考虑事务隔离性出现的问题
- 思考题-关于CSS(转)
dl, dt, dd三个标签浏览器默认margin值多少?是否有标签默认文字粗体? line-height:150%和line-height:1.5的区别是? float为何会让外部容器高度塌陷?这是 ...
- 使用HttpClient进行Post通信
---------------siwuxie095 首先到 Apache官网 下载相关的库文件 Apache官网:http://www.apac ...
- require()和include()代码重用
第五章 require()函数和include()函数几乎是相同的,二者唯一的区别在于函数失败后,require()函数将给出一个致命的错误,而include()只是给出一个警告. require_o ...