首页 > 数据库 >成为MySQL DBA后,再看ORACLE数据库(十、事务与隔离级别)

成为MySQL DBA后,再看ORACLE数据库(十、事务与隔离级别)

时间:2024-06-16 09:32:16浏览次数:32  
标签:语句 事务 隔离 DBA Oracle read MySQL ORACLE

一、事务控制语句

事务控制方式在ORACLE和MySQL中有着明显的不同,在ORACLE数据库中,当第一条可执行的SQL语句开始执行时,就隐性地开始了一个事务,然后继续执行随后的SQL语句,直到出现以下情况:1.commit,如果事务遇到commit语句,此前的所有更改将在数据库中永久生效;2. rollback,如果事务遇到rollback(回滚)语句,则此前的所有更改取消;3.如果用户发出一条ddl语句,则ORACLE在执行和提交该ddl语句的结果之前,首先提交作为事务一部分的当前所有dml语句,这被称为隐式提交;4.如果程序结束没有出现错误,则所有更改由数据库隐式提交;5.如果程序崩溃或中止,它此前所做的所有更改被数据库隐式回滚。

因此,ORACLE中的事务是隐式自动开始的,但对于事务的结束处理,则需要用户进行指定的操作。当然ORACLE也可以通过set transaction显示开启事务,但实际中很少这么做。ORACLE的事务控制语句主要有以下几个:1.commit:当此语句跟在一组dml语句后面时,更改将成为永久的更改;2.rollback;当此语句跟在一个或多个dml语句之后,前面的语句所做的更改被撤销,如果没有保留点,则从事务开始起的所有语句都将被回滚;3.savepoint:此语句提供事务的灵活性,帮助设置事务的中间点以便能够回滚(撤销)事务;set transaction:指示一个事务的状态,比如set transaction read only设置只读事务。

MySQL事务提交方式为默认提交,即执行每一条增删改DML语句后会默认自动提交,对行锁的获取和释放均很快操作结束,最大程度降低了读写事务的冲突,如果需要人为的开启事务则以begin开始,以commit或rollback结束。需要注意的是,在ORACLE中,有的应用程序使用了ODBC或JDBC,那么有时候这种接口会带一个自动提交,即在每个update语句后面悄悄地加一个commit,如果在开发过程中忽略了这个特性将会导致不好的事务习惯。

二、隔离级别

ORACLE支持三种隔离级别:read committed、serializable、read only,默认的隔离级别是read committed,并且在实际使用中也很少用到其他两种隔离级别。

MySQL的innodb引擎支持ANSI定义的4种隔离级别:read uncommitted、read committed、repeatable read、serializable。MySQL默认的隔离级别是repeatable read,但在实际生产中通常设置为read committed,read committed隔离级别下在一个事务中可以读到其他事务已提交的数据,虽然这种隔离级别在原则上违背了事务ACID中的一致性,但是在虽然这种隔离级别在原则上违背了事务ACID中的一致性,但是在实际的业务场景下我们可以容忍不可重复读或幻读的发生。而repeatable read为了解决幻读问题引入了next-key lock。因此,为了提升应用的并发性减少锁等待,read committed是更好的选择。

 三、MVCC

一方面Oracle通过锁定机制实现数据库的并发控制;一方面通过多版本(Multi-versioning Model)模型来进行并发数据访问。通过多版本架构,Oracle实现了读取和写入的分离,使得写入不阻塞读取;读取不阻塞修改。这是 Oracle 数据库区别于其他数据库的一个重要特征。Oracle内部使用SCN作为数据库时钟,每个数据块头部都会记录一个SCN,当数据更改提交后,SCN同时被修改,这个SCN在查询时可以用来进行一致性读判断。Oracle的多版本模型是通过读一致性性实现的,Oracle的read committed隔离级别下每个语句都要获取最新的SCN,假定查询开始的时间为T1,则在查询获取的数据块中,如果数据块的提交SCN小于T1,则Oracle接受该数据,如果提交SCN大于T1或者数据被锁定修改尚未记录COMMIT SCN,则Oracle需要通过回滚段构造前镜像来返回结果,这就是一致性读的本质含义。在ORACLE中所有的读操作都是基于快照的读,写入需要row lock,如果一个查询只是读取信息,那么它永远也不会被阻塞。

标签:语句,事务,隔离,DBA,Oracle,read,MySQL,ORACLE
From: https://www.cnblogs.com/coygfly/p/18249674

相关文章

  • 数据库MySQL——从0到1入门教程
    Q:为什么需要MySQL?A:网络服务中,我们需要存储、管理大量的数据,并确保数据的安全、实现增删改查操作的高效,因此需要一个系统用来专门管理数据,以实现上述的高性能要求,数据库管理系统应需而生八股如下:数据持久性:数据库能够持久化存储数据,确保数据在系统关闭或崩溃后依然存在......
  • Windows中搭建centos虚拟机和MySQL
    背景前一段时间,博主为了在家里搭建学习环境,想模拟一个生产环境,尝试了Windows安装WSL、Vmwareworkstationplayer安装Ubuntu、把Window删了直接装Ubuntu、把Ubuntu删了装回Windows(Windows一直无法安装到SSD,最后拆了电脑拔了机械硬盘才装成功)的多个阶段,发现还是Windows用的习惯......
  • 《mysql必知必会》读书笔记
    信息《MySQL必知必会》福塔人民邮电出版社摘录基本概念数据库保存有组织的数据的容器(通常是一个文件或一组文件)。表某种特定类型数据的结构化清单。模式关于数据库和表的布局及特性的信息。有时,模式用作数据库的同义词。主键一列或一组列,其值可以唯一区分表中......
  • 使用mysql_config_editor可以为特定的MySQL服务器或客户端程序设置登录路径
    login_path介绍在MySQL中,login_path通常不是MySQL服务器配置或SQL语句的一部分。但是,它经常与MySQL的命令行工具mysql_config_editor一起使用,这是一个允许用户安全地存储认证凭据(如用户名、密码和连接参数)的工具。mysql的client工具都能使用login-path,如......
  • Oracle 性能调优 10053事件
    思维导图10053事件概述我们在查看一条SQL语句的执行计划时,只看到了CBO最终告诉我们的执行计划结果,但是我们并不知道CBO为何要这样做。特别是当执行计划明显失真时,我们特别想搞清楚为什么CBO会做出这样的一个选择,那么就可以用10053事件来分析SQL分析过程的trace文件。同100......
  • MySQL中的日期格式化匹配
    在MySQL中,处理日期和时间数据是很常见的需求。在某些情况下,你可能需要从数据库中选择特定日期或格式化日期进行匹配。本文将介绍如何使用MySQL的SELECT语句对日期进行格式化匹配。1.基本的日期格式化函数MySQL提供了几个函数来处理和格式化日期和时间数据:DATE_FORMAT(dat......
  • 生产环境使用10053分析Oracle的执行计划
    【问题现象】在SQL出现性能问题后,通过分析统计信息、直方图、SQLAWR、查看执行计划等,仍然找不出为什么SQL要选择差的执行计划,就需要通过10053查看这个SQL的执行计划的更详细的信息。【操作方法】通过10053事件来查看执行计划和详细的SQL解析过程,10053的trace文件提供了Oracle......
  • MySQL数据库初体验
    SQLServer(微软公司产品)1、数据库基本概念(1)数据Data数据就是描述事物的符号记录。主要包括数字,文字、图形、图像、声音、档案记录等。一般以“记录”形式按统一的格式进行存储。(2)表表就是将不同的记录组织在一起。主要是用来存储具体数据。(3)数据库数据库(database)是表的集......
  • MySql 中 select 使用
    MySqlselect多种查询方式前言在数据库使用过程中,使用最多的场景就是查询数据,所以今天我们总结一下常用用的查询简单查询带条件查询多条件查询输出指定字段查询分组查询查询结果排序分页查询多表之间查询准备三张表:订单orders商品commodity用户users内容如下:......
  • MySQL + Keepalived自动切换
    目录一.环境准备二.部署软件三. master主机配置keepalived四.slave主机配置keepalived五.两台机器配置数据库检查脚本六.客户端模拟访问一.环境准备准备三个新环境的虚拟机,关闭防火墙和SElinux安全策略,并设置时间同步和配置好YUM源。虚拟IP用:192.168.226.20......