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 * ...
随机推荐
- java添加背景图片
总结:我们通常实现添加背景图片很容易,但是再添加按钮组件就会覆盖图片.原因是: 有先后啊.setlayout();与布局有很大关系 请调试代码的时候,仔细揣摩.我晕了 还可以添加文本框,密码框 fra ...
- mybatis sql中的条件语句
1.mybatis判断是否为空或null <if test="type!=null and type!=''"> AND type = #{type} </if& ...
- 四川第七届 C Censor (字符串哈希)
Censor frog is now a editor to censor so-called sensitive words (敏感词). She has a long text pp. Her j ...
- SQL修改日期时间型数据中的年月日
以下语句为更改 tevent表中的eventtime字段为2011-7-16当eventtime为2012-02-29时 update tevent set eventtime='2011-7-16 ...
- 使用cython把python编译so
1.需求 为了保证线上代码安全和效率,使用python编写代码,pyc可直接反编译,于是把重要代码编译so文件 2.工作 2.1 安装相关库: pip install cython yum insta ...
- [Chapter 3 Process]Practice 3.2 Including the initial parent process, how many processes are created by the program shown in Figure?
3.2 Including the initial parent process, how many processes are created by the program shown in Fig ...
- python的raw_input()函数。 函数的可变对象和不可变对象作为参数传递。
python的raw_input()函数, 接受键盘输入, 其返回值是字符串类型, 所以当输入的是数字时, 如果是想参与算术运算, 必须要对其进行类型转换. python的参数传递, 对于可变对象和不 ...
- 包学会之浅入浅出Vue.js:开学篇
2016年,乃至接下来整个2017年,如果你要问前端技术框架什么最火,那无疑就是前端三巨头:React.Angular.Vue.没错,什么jQuery,seaJs,gulp等都逐渐脱离了热点.面试的时 ...
- 12-19Windows窗体应用程序之记事本(2)
之前记事本的功能实现了“文件”和“编辑”中的功能操作,现在再继续下面的功能介绍: 3) <1>字体设置 [查看代码] [效果图] <2>字体颜色的设置 [查看代码] [效果图] ...
- mysql如何开启远程连接(默认未开启,即使密码正确,仍然无法访问)
mysql如何开启远程连接 | 浏览:1846 | 更新:2015-03-11 20:19 1 2 3 4 5 6 分步阅读 百度经验:jingyan.baidu.com 大家在公司工作中,经常会遇到 ...