前言

继上次技术分享后,学到了关于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>

小结

上面介绍了事务的由来,以及为了解决什么而存在。

感谢您的宝贵时间···

最新文章

  1. swap文件
  2. Python应用01 原始Python服务器
  3. Eclipse查看历史代码
  4. ubuntu matplotlib 安装
  5. sql语句相关操作
  6. Java基础知识强化68:基本类型包装类之Character概述和Character常见方法
  7. 临界段CCriticalSection的使用
  8. DataTable &amp;&amp; SqlDataReader帮助理解小程序
  9. 对Appium的认识 get
  10. Linux-PATH_环境变量
  11. [BZOJ1087] [SCOI2005] 互不侵犯King (状压dp)
  12. _proto_理解
  13. WPF设计の画刷(Brush)
  14. huffman编解码英文文本[Python]
  15. js事件之event.preventDefault()与(www.111cn.net)event.stopPropagation()用法区别
  16. css实现垂直居中的几种方法
  17. asp.net 导出excel的一种方法
  18. NSPredicate用法总结(Cocoa框架中的NSPredicate用于查询,原理和用法都类似于SQL中的where,作用相当于数据库的过滤取)
  19. ASP.NET自定义Web服务器控件-DropDownList/Select下拉列表控件
  20. Apache HttpComponents 多线程处理HTTP请求

热门文章

  1. jsp 的url传参中文乱码问题解决办法
  2. 使用内省的方式操作JavaBean
  3. Oracle 监听莫名死掉
  4. C# 连接Mysql 字符串
  5. Android编译系统产品线
  6. 人工智能一之TensorFlow环境配置
  7. Android 图片相关
  8. 关于mybatis和spring复合pom的异常
  9. 【总结整理】display、visibility、overflow的隐藏问题
  10. final 子类禁止重写