2
目 录
第 1 章 SQL 语言............................................................................................................................4
1.1 SQL 语言概述....................................................................................................................4
1.1.1 SQL 语言与传统程序语言的差别 .........................................................................4
1.1.2 SQL 语言的历史.....................................................................................................4
1.1.3 SQL 语言的分类.....................................................................................................5
1.2 SQL *Plus 的使用方法 ......................................................................................................5
1.2.1 Oracle 中的预置用户..............................................................................................5
1.2.2 连接数据库的方式.................................................................................................6
1.2.3 使用 SQL*Plus.......................................................................................................6
1.3 简单查询 ...........................................................................................................................9
1.3.1 select-from-where 结构 ...........................................................................................9
1.3.2 设置查询结果字段的别名及排序........................................................................10
1.3.3 WHERE 关键字的使用 ........................................................................................11
1.3.4 汇总函数...............................................................................................................14
1.3.5 GROUP BY 及 HAVING 子句 .............................................................................16
1.3.6 理解 NULL...........................................................................................................17
1.4 UPDATE、DELETE、INSERT 语句......................................................................17
1.5 复杂查询 .........................................................................................................................18
1.5.1 表连接 ..................................................................................................................18
1.3.7 集合运算...............................................................................................................22
1.3.8 子查询 ..................................................................................................................23
1.3.9 EXISTS 及 NOT EXISTS 的用法(略).............................................................25
第 2 章 表及完整性约束...............................................................................................................26
2.1 数据类型 .........................................................................................................................26
2.2 创建简单的表 .................................................................................................................27
2.3 完整性约束 .....................................................................................................................27
2.4 创建带有约束的表..........................................................................................................28
2.6 修改表 .............................................................................................................................31
第 3 章 Oracle 中建立数据库及表空间管理...............................................................................33
3.1 手工建库 .........................................................................................................................33
3.2 数据库的启动和关闭......................................................................................................36
3.2.1 数据库的启动.......................................................................................................36
3.2.2 数据库的关闭.......................................................................................................37
3.3 管理表空间(tablespace)..................................................................................................37
3.3.1 表空间的基本概念...............................................................................................37
3.3.2 表空间的种类.......................................................................................................38
3.3.3 在 Oracle 中创建表空间......................................................................................38
3.3.4 在表空间中创建表...............................................................................................39
3.3.5 autoallocate 及 uniform size 选项使用探秘 .........................................................40
3.3.6 由多个数据文件构成的表空间...........................................................................44
第 4 章 事务处理、并发控制及锁...............................................................................................49
4.1 事务的概念及 ACID 属性..............................................................................................49
PDF 文件使用 "pdfFactory Pro" 试用版本创建 www.fineprint.cn
3
4.2 Oracle 中的事务操作.......................................................................................................49
4.3 Oracle 中的并发控制.......................................................................................................49
4.4 Oracle 中的事务隔离级别...............................................................................................49
4.5 锁 .....................................................................................................................................52
第 5 章 索引原理 ..........................................................................................................................53
5.1 索引结构(略)...................................................................................................................53
5.2 Oracle 中如何创建索引...................................................................................................53
5.3 在 SQL*Plus 中查看执行计划 ........................................................................................54
5.4 使用索引的场合 .............................................................................................................55
5.5 索引未被使用的原因......................................................................................................56
5.6 索引与空值 .....................................................................................................................59
5.7 实验:应用索引提高查询速度的检验..........................................................................60
5.8 DML 语句对索引的影响.................................................................................................61
第 6 章 存储过程以及触发器.......................................................................................................65
6.1 PL/SQL 的基本结构 ........................................................................................................65
6.2 简单的 PL/SQL 程序设计 ..............................................................................................67
6.2.1 声明 ......................................................................................................................67
6.2.2 使用%TYPE 和%ROWTYPE..............................................................................68
6.3 游标 .................................................................................................................................69
6.3.1 显式游标...............................................................................................................69
6.3.2 隐式游标...............................................................................................................71
6.4 触发器 .............................................................................................................................71
6.4.1 语句触发器...........................................................................................................71
6.4.2 行触发器...............................................................................................................72
6.4.3 instead of 触发器...................................................................................................74
6.5 存储过程 .........................................................................................................................74
第 7 章 备份与恢复 ......................................................................................................................78
7.1 Oracle 数据库日志及归档日志的作用...........................................................................78
7.1 归档日志的设置 .............................................................................................................78
7.2 备份与恢复实验 .............................................................................................................80
7.3 逻辑备份 .........................................................................................................................80
第 8 章 Oracle 的用户和权限管理...............................................................................................84
8.1 用户管理 .........................................................................................................................84
8.2 权限管理 .........................................................................................................................84
第 9 章 Oracle 数据库的网络连接...............................................................................................86
第 10 章 Oracle 数据库的体系结构 .............................................................................................87
PDF 文件使用 "pdfFactory Pro" 试用版本创建 www.fineprint.cn
4
第 1 章 SQL 语言
1.1 SQL 语言概述
SQL 是在各种关系型数据库中对数据进行操作的语言(也可称为工具),可以利用数据库
管理系统本身提供的客户端管理工具通过输入 SQL 对数据库进行操作,也可以嵌入到第三
方程序开发语言中,对数据库进行操作。由于 SQL 语言在查询上的灵活性、在语法上的简
捷以及在执行上的高效率,使它成为数据库管理者及设计者的不可替代的工具。SQL 语言
已经成为数据库系统的标准语言。
1.1.1 SQL 语言与传统程序语言的差别
SQL 语言或用 SQL 语言写成的程序必须应用在数据库管理系统中,其本身不能独立执
行,而且为“非过程性”语言,与平时所熟悉的 C、PASCAL 等程序设计语言有很大不同。
利用 SQL 语句我们只要指出自己所要的数据、存放位置和查询条件,根本不需要知道
数据库管理系统是如何找到或处理数据的。为了加强 SQL 语言的能力,各数据库厂商都在
SQL 语言中加入了过程性语言的特征,增加了诸如流程控制、条件转向、变量定义等指令,
使 SQL 语言有了很大程度上的扩展。Oracle 对 SQL 语言的扩展称为 PL/SQL,而 SQL Server、
Sybase 对 SQL 语言的扩展称为 T-SQL。
SQL 是一种介于关系代数和关系演算之间的非过程化的集合操作语言,具有关系代数
和关系演算的双重特点:
1) 综合统一;
2) 高度非过程化;
3) 面向集合的操作方式;
4) 以一种语法结构提供两种使用方式,即,既是自包含式语言,又是嵌入式语言;
5) 语言简捷,易学易用。
1.1.2 SQL 语言的历史
1) 1970 年,IBM 研究中心的 E.F Codd 提出关系模型的概念
2) 1972 年,IBM 公司开始研制实验型关系数据库系统 SYSTEM R,配置的查询语言
SQUARE 语言,在语言中使用了较多的数学符号。
3) 1974 年,Boyce 和 Chamberlin 把 SQUARE 语言修改为 SEQUEL 语言,这两个语
言在本质上是相同的,但后者去掉了一些实数学符号,并 采 用 英 语单词和结构化的
语法规则,看起来很象英语句子,受到很大欢迎。
4) SEQUEL 简称为 SQL(Structured Query Langauge)。
5) 1986 年,ANSI 发布 SQL(86)标准,后来被 ISO 采纳为国际标准,称为“SQL-86”。
6) 1989 年,ANSI 发布 SQL-89,后来也被 ISO 采纳为国际标准。SQL-86 和 SQL-89
现在当然已经成为过时的标准。
7) 1992 年,ANSI/ISO 发布 SQL(1992),习惯称为 SQL2,它分为 Entry SQL,Intermediate
SQL,Full SQL。Entry SQL 基本上就是 SQL89,现在的数据库产品多数都完全支
PDF 文件使用 "pdfFactory Pro" 试用版本创建 www.fineprint.cn
5
持 Entry 级别,同时部分支持 Intermediate 和 Full 级别的某些特性。
8) 1999 年,ANSI/ISO 发布 SQL-99(或 SQL-1999),习惯称为 SQL3。
1.1.3 SQL 语言的分类
在 SQL-92 标准中,SQL 语法中的语句,依据其功能的差别,可以分为 DDL(Data
Definition Language,数据定义语言)、DML(Data Manipulation Language,数据处理语言)及
DCL(Data Control Language,数据控制语言)三类。SQL-99 的分类方式有所变化。
1) DDL 语句
数据表、视图、索引、存储过程、触发器等都视为数据库对象。凡用来定义(或建立)
数据库对象,以及修改数据库对象结构的 SQL 语句,都属于 DDL 语句。
2) DML 语句
DML 类型语句主要包括由 SELECT、UPDATE、INSERT、DELETE 构成的 SQL 语句。
用于在数据表中查询、更新、增加和更改记录。
3) DCL 语句
DCL 语句一般指专门用来设置数据库对象使用权限的语句,包括 GRANT、DENY 和
REVOKE 三种。从广义的角度看,还包括控制执行流程的 IF……ELSE、WHILE 语句,以
及控制事务进行的 BEGIN TRAN、COMMIT TRAN 和 ROLLBACK TRAN 等语句。
1.2 SQL *Plus 的使用方法
为了方便读者进行实验,我们首先讲解 Oracle 的客户端工具的使用方法。
多数数据库产品都提供与数据库进行交互操作的两类客户端管理工具――图形界面和
字符界面(或称为命令行),字符界面客户端管理工具用于输入和执行 SQL 语句,对 SQL 语
句不熟悉的用户可以利用图形界面管理工具以更直观的方式操作数据库。数据库专业人员一
般主要使用字符界面工具。
Oracle 提供的这两种工具分别是 SQL*Plus 和 Enterprise Manager,前者为字符界面,后
者为图形界面。SQL Server 提供的字符管理工具为 osql(7.0 之前的版本是 isql),图形界面工
具也称为 Enterprise Manager。
在 Oracle 中,主要的管理工具为字符界面的 SQL*Plus,这就要求用户要熟悉各种 SQL
命令。
1.2.1 Oracle 中的预置用户
要操作 Oracle 数据库,首先要以数据库中的合法用户连接到数据库,Oracle 中常用的
预置用户有以下三个:
sys:Oracle 中权限最大的用户,位于数据库之外,可以启动、关闭数据库,创建数据
库,在数据库内拥有操作数据库的所有权限,以 sys 连接数据库时要加上 as sysdba 子句。
system:是数据库内权限最大的用户。
scott 用户:Oracle 提供的用于学习和测试的用户,其口令为 tiger,可以在 SQL*Plus 中
执行 scott.sql 脚本文件建立这个用户以及此用户下的四张表,这几张表及其数据模拟了一个
小型公司的员工管理系统,非常适合作为学习之用。Oracle 公司成立之初,软件开发任务主
PDF 文件使用 "pdfFactory Pro" 试用版本创建 www.fineprint.cn