Oracle基础概述
体系结构
Oracle的物理结构包含三种类型的文件:
- 数据文件和临时文件
- 控制文件
- 联机重做日志文件
数据文件由数据库创建,保存在磁盘上,包含的数据结构如表和索引。临时文件是临时表空间文件,以Oracle专有的格式写入磁盘,不能被其它程序使用。
控制文件是保存数据库物理组件跟踪信息的根文件。
联机重做日志文件包含数据更改的信息,必要时可回退。
Oracle的逻辑结构包含四个部分:
- 表空间
- 段
- 区
- 数据块
一个实例(数据库)包含多个表空间,表空间包含多个段,一个段包含多个区,一个区包含多个数据块。数据块是逻辑结构中的最小单位。其中一个表空间包含多个用户,一个用户包含多个表。
安装
官网下载安装包进行安装,其中自带命令行工具SQL Plus和客户端工具SQL Developer。
命令行输入命令:
出现交互式界面,输入正确的用户名、密码即可登录。默认实例为ORCL。
Oracle包含一些默认用户与数据表,如果用户被锁定或权限不足,可使用ALTER命令解锁用户,使用GRANT命令授予权限。
SQL
SQL是结构化查询语言,虽然被ISO标准化,但在各数据库系统中均存在差异。
Oracle中的SQL语句分为六种类型:
- 数据定义语言(DDL)
- 数据操纵语言(DML)
- 事务控制语句
- 会话控制语句
- 系统控制语句
- 嵌入式SQL语句
DDL
数据定义语言用于操作数据表,比如创建表、删除表:
建表时也会为某些字段添加约束,Oracle的约束类型有六种:
- 唯一约束
- 主键约束
- 外键约束
- 检查约束
- 非空约束
- 默认约束
前四种为表级约束,后两种为列级约束。一般表级约束即有别名的约束,列级约束没有也不需要别名,表级约束定义在所有字段之后,列级约束与字段定义在同一行。
约束是将数据表操作的一些规范放在数据库端做强制的要求,有时并不需要,可以加强服务端的验证,保持事务一致。
DML
SQL查询语句的书写顺序一般为:
数据库对语句的执行顺序一般为:
因此,实际执行顺序中,前面执行的部分不可以使用其后定义的别名。Oracle也提供了丰富的运算符、函数,分布在各个相应的字段以使用。
多表查询是SQL查询经常使用到的操作。实现多表查询的方式可以有:
- 直接从多个表查询
- 使用连接关键字
- 子查询
直接从多个表查询指FROM于多个表,在WHERE中写入连接条件。这种方式默认数据集为多张表数据的笛卡尔积,需要在条件中写入连接条件,过滤掉无用数据。
JOIN关键字是多表联查的语法糖,有内连接、左连接、右连接等,都可同时连接多张表。CROSS JOIN不需要指定连接谓词(连接条件),为笛卡尔积。
子查询即将查询语句嵌套进另一条语句中作为参数。
增删改分别对应关键词INSERT、DELETE、UPDATE,其语句中可以使用子查询。
其它语句
Oracle中的事务控制语句有五个,用于管理DML所做的更改:
- COMMIT
- ROLLBACK
- SAVEPOINT
- SET TRANSACTION
- SET CONSTRAINT
其中COMMIT和ROLLBACK在PL/SQL中不被支持,其余事务控制语句均支持。
会话控制语句有两个,用于设置用户的属性:
- ALTER SESSION
- SET ROLE
系统控制语句用于设置数据库实例的属性:
- ALERT SYSTEM
会话控制语句和系统控制语句都不被PL/SQL支持。
虚表&视图&临时表
虚表即数据库中没有真实存在的表,不占用物理空间。
虚表DUAL是一张神奇的表,数据库自动创建,是Oracle提供的最小的工作表,仅包含一行一列,而且不论我们做什么操作,它都始终只包含那一条和其它表数据无关的记录。经常用DUAL表来单纯满足SQL语句语法的要求,如查询系统时间、做计算等。
视图是虚表,不占用物理空间,虽然它本身的定义语句还是要存储在数据字典里。视图不储存数据,会在每次使用时重新执行。
临时表是建立在系统临时文件夹中的表,属于临时文件,三种物理结构文件之一。如果使用得当,可以像普通表一样进行各种操作。
视图只存在于单个查询中,临时表则存在于被创建的整个数据库会话过程中。
索引
Oracle会自动为主键和唯一约束字段建立索引。
Oracle中的索引类型有:
- B树索引
- 位图索引
- 单列索引与复合索引
- 函数索引
索引可以加快检索速度,但会占用物理空间,会随数据量的增大而增大,要酌情使用。
PL/SQL
PL/SQL是Oracle专用的SQL扩展语言,拥有高级语言所有的一些语言特性。
PL/SQL允许定义变量,变量类型有基本数据类型、复合数据类型和参照数据类型。基本数据类型与Oracle数据类型基本相同,复合数据类型RECORD类似C语言中的结构体,参照数据类型如%TYPE和%ROWTYPE。
PL/SQL中的游标可理解为数据集的操作对象,即指向查询结果的指针,如JDBC中的Statement对象。
PL/SQL同样提供了选择结构和循环结构,用于SQL语句的组织。
过程和函数统称为PL/SQL子程序,是被命名的PL/SQL块,存储在数据库中,可输入、输出参数,操作外部变量。
PL/SQL也可以处理异常,有专门用于处理异常的语句块。
触发器是事件驱动的代码块,会在发生指定CRUD事件之前或之后自动执行,和子程序相比,不需要用户显式调用。
PL/SQL同样有程序包的概念,和JAVA中的包类似,有助于程序的模块化。