事务的属性

1.只读属性(read only)

只读事务,只执行查询操作,而不允许执行DML(增、删、改)操作,使用只读事务,可以让用户只取到某个时间点的数据。

假如有一个机票代售点,有一个管理员想在一个时间点进行统计总共卖出去的数量,这个时候可以使用只读事务。设置了只读事务之后,尽管有其它的对话产生,但是只读事务不会去去取最新的      事务的变化,从而可以保证一个时间点只取到需要的数据。

语法:set transaction read only

2.读写属性(read write)

可以将事务设置为可读可写的状态,是事务的默认状态,一旦设定了读写事务,那么在该命令之前就不能出现set transaction命令之外的其他命令。

语法:set transaction read write

事务的隔离级别

在数据库操作中,为了有效保证并发读取数据的正确性,提出了事务的隔离级别。

没有设置事务的隔离级别可能会出现以下几点问题:

1.更新丢失

两个事务都同时更新一行数据,一个事务对数据的更新把另一个事务对数据的更新覆盖了。这是因为系统没有执行任何的锁操作,因此并发事务并没有被隔离开来。

2.读脏数据

一个事务读取到了另一个事务未提交的数据操作结果。这是相当危险的,因为很可能所有的操作都被回滚。

3.不可重复读

不可重复读(Non-repeatable Reads):一个事务对同一行数据重复读取两次,但是却得到了不同的结果。

包括以下情况:

(1)虚读:事务T1读取某一数据后,事务T2对其做了修改,当事务T1再次读该数据时得到与前一次不同的值。

(2)幻读(Phantom Reads):事务在操作过程中进行两次查询,第二次查询的结果包含了第一次查询中未出现的数据或者缺少了第一次查询中出现的数据(这里并不要求两次查询的SQL语句相同)。    这是因为在两次查询过程中有另外一个事务插入数据造成的。

解决方法:

为了避免上面出现的几种情况,在标准SQL规范中,定义了4个事务隔离级别,不同的隔离级别对事务的处理不同。

读未提交(Read Uncommitted)

允许脏读取,但不允许更新丢失。如果一个事务已经开始写数据,则另外一个事务则不允许同时进行写操作,但允许其他事务读此行数据。该隔离级别可以通过“排他写锁”实现。

读提交(Read Committed)

允许不可重复读取,但不允许脏读取。这可以通过“瞬间共享读锁”和“排他写锁”实现。读取数据的事务允许其他事务继续访问该行数据,但是未提交的写事务将会禁止其他事务访问该行。

可重复读取(Repeatable Read)

禁止不可重复读取和脏读取,但是有时可能出现幻读数据。这可以通过“共享读锁”和“排他写锁”实现。读取数据的事务将会禁止写事务(但允许读事务),写事务则禁止任何其他事务。

序列化(Serializable)

提供严格的事务隔离。它要求事务序列化执行,事务只能一个接着一个地执行,不能并发执行。仅仅通过“行级锁”是无法实现事务序列化的,必须通过其他机制保证新插入的数据不会被刚执行查询操作的事务访问到。

隔离级别越高,越能保证数据的完整性和一致性,但是对并发性能的影响也越大。对于多数应用程序,可以优先考虑把数据库系统的隔离级别设为读提交Read Committed。它能够避免脏读取,而且具有较好的并发性能。尽管它会导致不可重复读、幻读和第二类丢失更新这些并发问题,在可能出现这类问题的个别场合,可以由应用程序采用悲观锁或乐观锁来控制。

oracle事务重要属性,Oracle中的事务(2)--属性和隔离级别相关推荐

  1. mysql4.0事务_聊一聊 MySQL 中的事务及其实现原理

    说到数据库,那就一定会聊到事务,事务也是面试中常问的问题,我们先来一个面试场景: 面试官:"事务的四大特性是什么?" 我:"ACID,即原子性(Atomicity).隔离 ...

  2. springmvc开启事务_在Controller中添加事务管理

    写这篇文章之前先说明一下: 1. Controller中添加事务管理,是可行的,但是强烈不推荐,因为不符合实际开发场景,还会导致一系列问题 2. 事务请在Service处理,所有的业务逻辑请写在 Se ...

  3. java中的事务回滚_Spring中的事务回滚机制

    问题:在Java项目汇中,添加@Transactional注解,报错之后,事务回滚未生效,数据仍插入数据库中.经查看报错位置位于新增成功之后.空指针异常. 一.特性 先了解一下@Transaction ...

  4. mybatis plus 事务管理器_Mybatis中的事务

    Mybatis中的事务 数据库中的事务可以保证在连续执行的多条写操作(增删改)时,这多条操作要么成功,要么全部失败,以保证数据和逻辑的完整及严谨 在使用mybatis时,无需考虑事务如何创建,如何提交 ...

  5. java代码中添加事务_C#和JAVA中编写事务代码

    C#  DAL层代码,执行多条增删改,使用事务操作: /// /// 执行 多条增删改 (非查询语句) /// /// /// /// public static int ExcuteNonQuery ...

  6. HTML5中拖动功能的添加属性,html5中可拖动dragable属性及其他成员的讲解

    html5中可拖动dragable属性及其他成员的讲解 发布时间:2020-04-22 11:08:02 来源:亿速云 阅读:350 作者:小新 这篇文章主要为大家详细介绍了html5中可拖动drag ...

  7. android中edittext属性,Android中EditText的inputType属性的详解

    xml的inputtype的值. Android:inputType="none" android:inputType="text" android:input ...

  8. java中mvc事务_关于项目中的事务问题_JavaEE框架(Maven+SpringMvc+Spring+MyBatis)全程实战教程_Java视频-51CTO学院...

    SpringMVC Spring MVC属于SpringFrameWork的后续产品,已经融合在Spring Web Flow里面.Spring MVC 分离了控制器.模型对象.分派器以及处理程序对象 ...

  9. java display属性_JavaScript中的style.display属性操作

    display版本:CSS1/CSS2    兼容性:IE4+   NS4+ 继承性:无 语法: display   :   block   |   none   |   inline   |   c ...

  10. html5video标签属性,H5中video标签那些属性和方法

    前言 最近在写一个自定义播放器, 写之前我们肯定要把播放器的属性和方法全部过一遍,知彼知己,方能百战不殆嘛...后面会把自己写的播放器和踩过的一些坑也上传上来 video标签行内属性 src:视频的U ...

最新文章

  1. Koltin 高阶函数
  2. 多IP绑定与多网卡绑定
  3. 找出数组中出现次数最多的一项并统计次数
  4. c#(winform)环境下使用动态链接库dll的详解
  5. Winform中实现FTP客户端并定时扫描指定路径下文件上传到FTP服务端然后删除文件
  6. scanf最好与fflush(stdin)配合使用
  7. jsp文件的请求是如何被服务器的JSP容器转换成静态网页的
  8. 【联盛德W806上手笔记】三、MCU系统与时钟结构
  9. C语言实现ICMP协议Ping命令
  10. hdu 2570 贪心
  11. bootstrap datetimepicker 复选可删除,可规定指定日期不可选
  12. 计算机网络学习笔记(30. DNS记录和消息)
  13. php srem,Redis Srem 命令
  14. [2019杭电多校第七场][hdu6646]A + B = C(hash)
  15. Windows10 如何删掉内置的 skype ?
  16. 虚拟机安装苹果系统_开源神器:助你快速安装苹果虚拟机!
  17. 从小就对生意耳濡目染的小伙,长大后创业资产过亿
  18. 超信Linux版(超信 for Linux下载) v1.3.0官方版
  19. hdu1425 sort
  20. selenium之find_element_by_xpath定位元素

热门文章

  1. Mysql索引机制B+Tree
  2. 将python代码编译成.so文件
  3. 零基础30分钟开启你的快速开发之旅
  4. Spring自学教程-注解的使用(三)
  5. WDK中出现的特殊代码
  6. OV7725的帧率和PCLK寄存器设置
  7. JVM GC调优总结 -Xms -Xmx -Xmn -Xss
  8. C语言中字符型和字符串型的对比
  9. C语言必须写main函数?最简单的 Hello world 你其实一点都不懂!
  10. 如果访问云服务器上的文件,如果访问云服务器上的文件