百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 优雅编程 > 正文

[Oracle数据库] Oracle事务和常用数据对象

sinye56 2024-09-21 02:36 4 浏览 0 评论

本次内容的相关知识点我们在学习sqlserver2008R2的时候介绍过一些,包括:事务、索引、视图等。那么今天我们学习在oracle上实现这些重要的内容,以实现数据库的优化。


一、事务

1、简介

事务是数据处理的核心,是业务上的一个逻辑单元,它能够保证其中对数据所有的操作,要么全部成功,要么全部失败。DBMS通过事务的管理来协调用户的并发行为,减少用户访问资源的冲突。

1)显示提交:当事务遇到COMMIT指令时,将结束事务并永久保存所有的更改的数据。

2)显示回滚:当事务遇到ROLLBACK指令时,也将结束事务的执行,但是此时它回滚所有更改的数据到事务开始时的原始值,即取消更改,数据没有变化。

3)DDL语句:一旦用户执行了DDL(数据定义语言,如create,drop等)语句,则之前的所有DML(数据操作语言)操作作为一个事务提交,这种提交称为隐示提交。

4)正常结束程序:如果oracle数据库应用程序正常结束,如使用sqlplus工具更改了数据,而正常退出该程序(exit),则oracle自动提交事务。

5)非正常地结束程序:当程序崩溃或意外终止时,所有数据更改都被回滚,这种回滚成为隐示回滚。


2、事务的特点

事务有4个特性,简写为ACID特性。

1)原则性:以转账操作为例,转出账户余额减少和转入余额增加是两个DML语句,但是必须作为一个不可分割的完整操作。要么同时成功,要么同时失败,只转出而没有转入显然是不可接受的。

2)一致性:无论是在事务前、事务中、事务后,数据库始终处于一致的状态。例如:转账前分别是2000和1000,总金额是3000,转账300后分别是1700和1300,总金额还是3000.这就叫做一致性。不一致就是在某个时间点查询到的总金额不是3000。

3)隔离性:在某个时间段,肯定有很多人都在转账,每个人的转账都是在自己的事务中,所以在一个数据库中,会有很多事物同时存在。虽然同时存在很多事物,但是事物之间不会相互影响。

4)持久性:如果事物提交成功,则数据修改永远生效,如果是回滚,则数据完全没有没修改,就相当于没有这件事情发生。


3、学会事物的控制

1)使用COMMIT和ROLLBACK实现事物控制

COMMIT:提交事物,把事物中对数据库的修改进行永久保存。

ROLLBACK:回滚事物,取消对数据库所做的任何修改。

2)使用AUTOCOMMIT实现事物的自动提交

Orade提供了一种自动提交DML操作的方式,这样一旦用户执行了DML操作,如UPDATE,DELETE等,数据就会自动提交。

例2:使用autocommit实现事物自动提交,设置autocommit为ON

3)验证持久性

一旦使用commit命令来结束某个事务,那么就必须保证数据库不丢失这个事务。在事务进行期间,隔离性的原则要求除了指定会话涉及的用户之外的任何用户都不能查看当前所做的变化。不过事务一旦完成,所有用户都必须能够立即看到所做的变化,同时数据库必须保证这些变化绝不会丢失。Oracle通过使用日志文件来满足这个需求。日志文件具有两种形式:联机重做日志文件,归档重做日志文件。

一个正确配置的oracle数据库是不可能丢失数据的。当然用户的错误(包括不恰当的DML或删除对象)也会造成数据的丢失。DDL语句有自动提交功能(create、drop、truncate、alter)

关于事物的总结:

需要注意的是,Commit:只是用来确认这个数据已经正式的修改了,不一定非得写入硬盘,DBWn什么都不做。执行commit命令时发生的所有物理操作时LGWR进程将日志缓冲区的内容写入磁盘。DBWN进程完全没有执行任何操作。DBWN进程与提交事物处理没有关系,不过最终DBWN进程会将变化的数据块写入磁盘。 commit和rollback语句只应于DML语句,我们无法回滚DDL语句。DDL语句一旦被执行就会立即具有持久状态。


二、索引

1、索引的含义

Oracle 数据库对象又称模式对象,数据库对象是逻辑结构的集合,最基本的数据库对象是表,索引也是其中之一。其他数据库对象包括:

索引是oracle的一个对象,是与表关联的可选结构,提供了一种快速访问数据的途径,提高了数据库检索性能。索引使数据库程序无需对整个表进行扫描,就可以在其中找到所需要的数据。就像书的目录,可以通过目录快速查找所需信息,无需阅读整本书。


2、索引的特点

适当地使用索引可以提高查询速度

可以对表的一列或多列建立索引

建立索引的数量没有限制

索引需要磁盘存储,可以指定表空间,由oracle自动维护

索引对用户透明,检索时是否使用索引由oracle自身决定

Oracle数据库管理系统在访问数据时使用以下三种方式:

  • 全表扫描

  • 通过ROWID(行地址,快速访问表的一行)

  • 使用索引

  • 当没有索引或者不选择使用索引时就用全表扫描的方式


3、索引的分类

1)B树索引结构

索引的顶部为根,其中包含指向下一级索引的项。下一级为分支块,分支块又指向索引中下一级的块,最低一级的块称为叶节点,其中包含指向表数据行的索引项。叶节点为双向连接,有助于按关键字值得升序和降序扫描索引。

例如:查询id从2到31行的数据

上图中使用索引遍历过程如下:

先找到id<=50的分支块,再找到30-40的分支块,在找到id=31对应的索引项,之后通过叶节点双向链接,平行地找到包含id=2的索引块,完成对id的查询


4、创建索引的语法

create [unique] index 索引名称 on 表名(列名)[tablespace 表空间名称]

解释:

[unique]用于指定唯一索引,默认情况下为非唯一索引

[tablespace]为索引指定表空间

1)创建标准索引

SQL> CREATE INDEX index_name ON tablename(columnname)

TABLESPACE index_tbs;

2)重建索引

SQL> ALTER INDEX index_name REBUILD;

合并索引碎片

SQL>ALTER INDEX index_name COALESCE;

3)删除索引

SQL> DROP INDEX index_name;


三、视图

1、概述

视图是一个虚表,不占用物理空间,因为视图本身的定义语句存储在数据字典里,视图中的数据是一个或多个实际表中获得的。那些用于产生视图的表叫做该视图的基表。一个视图也可以从另一个视图中产生。


2、视图的优点:

1)提供了另外一种级别的表安全性

2)隐藏的数据的复杂性:一个视图可能是用多表连接定义的,但用户不需要知道多表连接的语句也可以查询数据。

3)简化的用户的SQL命令:查询视图的时候不需要写出复杂的查询语句,只需要查询视图名称即可。

4)隔离基表结构的改变:视图创建好了之后,如果修改了表的结构,也不会影响视图的。

5)通过重命名列,从另一个角度提供数据:例如在销售系统中,每日下班前要对当日数据进行汇总,在销售人员眼中,该汇总表成为日销售统计表,在财务人眼中,该销售表成为销售日报表。


3、创建视图的语法:

1) CREATE [OR REPLACE] [FORCE] VIEW

view_name [(alias[, alias]...)]

AS select_statement

[WITH CHECK OPTION]

[WITH READ ONLY];

解释:

OR REPLACE:如果视图已存在,此选项将重新创建该视图。

FORCE:如果使用此关键字,则无论基表是否存在,都将创建视图。

NOFORCE:这是默认值,如果使用此关键字,则仅当基表存在时才创建视图。

VIEW_NAME:要创建视图的名称

Alias:指定由视图的查询所选择的表达式或列的别名。别名的数目必须与视图所选择的表达式的数目相匹配。

Select_statement:select语句

WITH CHECK OPTION :此选项指定只能插入或更新视图可以访问的行。术语constraint表示为CHECK OPTION约束指定的名称。

WITH READ ONLY:此选项保证不能在此视图上执行任何修改操作。

2)视图中的ORDER BY子句

可以在创建视图时在SELECT语句中使用ORDER BY子句,以便按照特定的顺序进行排序,这样,在查询视图时即使不使用ORDER BY子句,结果集也会按指定的顺序进行排列。

3)创建带有错误的视图

如果在create view语句中使用FORCE选项,即使存在系列情况,oracle也会创建视图。

  • 视图定义的查询引用了一个不存在的表。

  • 视图定义的查询引用了现有表中无效的列。

  • 视图的所有者没有所需的权限。

在这些情况下,oracle仅检查create view语句中的语法错误。如果语法正确,将会创建视图,并将视图的定义存在数据字典中。但是,该视图却不能使用。这种视图被认为是“带错误创建”的。可使用SHOW ERRORS VIEW视图名来查看错误。

相关推荐

Linux在线安装JDK1.8

首先在服务器pingwww.baidu.com查看是否可以连网然后就可以在线下载一、下载安装JDK1.81、在下载安装的同时做好一些准备工作...

Linux安装JDK,超详细

1、了解RPMRPM是Red-HatPackageManager(RPM软件包管理器)的缩写,这一文件格式名称虽然打上了RedHat的标志,但是其原始设计理念是开放式的,现在包括OpenLinux...

Linux安装jdk1.8(超级详细)

前言最近刚购买了一台阿里云的服务器准备要搭建一个网站,正好将网站的一个完整搭建过程分享给大家!#一、下载jdk1.8首先我们需要去下载linux版本的jdk1.8安装包,我们有两种方式去下载安装...

Linux系统安装JDK教程

下载jdk-8u151-linux-x64.tar.gz下载地址:https://www.oracle.com/technetwork/java/javase/downloads/index.ht...

干货|JDK下载安装与环境变量配置图文教程「超详细」

1.JDK介绍1.1什么是JDK?SUN公司提供了一套Java开发环境,简称JDK(JavaDevelopmentKit),它是整个Java的核心,其中包括Java编译器、Java运行工具、Jav...

Linux下安装jdk1.8

一、安装环境操作系统:CentOSLinuxrelease7.6.1810(Core)JDK版本:1.8二、安装步骤1.下载安装包...

Linux上安装JDK

以CentOS为例。检查是否已安装过jdk。yumlist--installed|grepjdk或者...

Linux系统的一些常用目录以及介绍

根目录(/):“/”目录也称为根目录,位于Linux文件系统目录结构的顶层。在很多系统中,“/”目录是系统中的唯一分区。如果还有其他分区,必须挂载到“/”目录下某个位置。整个目录结构呈树形结构,因此也...

Linux系统目录结构

一、系统目录结构几乎所有的计算机操作系统都是使用目录结构组织文件。具体来说就是在一个目录中存放子目录和文件,而在子目录中又会进一步存放子目录和文件,以此类推形成一个树状的文件结构,由于其结构很像一棵树...

Linux文件查找

在Linux下通常find不很常用的,因为速度慢(find是直接查找硬盘),通常我们都是先使用whereis或者是locate来检查,如果真的找不到了,才以find来搜寻。为什么...

嵌入式linux基本操作之查找文件

对于很多初学者来说都习惯用windows操作系统,对于这个系统来说查找一个文件简直不在话下。而学习嵌入式开发行业之后,发现所用到的是嵌入式Linux操作系统,本想着跟windows类似,结果在操作的时...

linux系统查看软件安装目录的方法

linux系统下怎么查看软件安装的目录?方法1:whereis软件名以查询nginx为例子...

Linux下如何对目录中的文件进行统计

统计目录中的文件数量...

Linux常见文件目录管理命令

touch用于创建空白文件touch文件名称mkdir用于创建空白目录还可以通过参数-p创建递归的目录...

Linux常用查找文件方法总结

一、前言Linux系统提供了多种查找文件的命令,而且每种查找命令都具有其独特的优势,下面详细总结一下常用的几个Linux查找命令。二、which命令查找类型:二进制文件;...

取消回复欢迎 发表评论: