第1章 数据库技术基础 1
1.1 数据库应用的场合 1
1.2 常用术语 1
1.3 数据库系统的构成 1
1.3.1 硬件 2
1.3.2 软件 2
1.3.3 人员 2
第2章 关系模型理论的发展及主要产品 4
2.1 数据处理的历史 4
2.2 数据模型的概念 5
2.3 网状模型与层次模型简介 5
2.3.1 网状模型 5
2.3.2 层次模型 6
2.3.3 层次模型和网状模型的贡献及缺陷 6
2.4 关系模型的提出和成熟 6
2.4.1 关系数据模型要解决的问题 7
2.4.2 关系模型的提出与完善 7
2.4.3 IBM的System R项目 7
2.4.4 加州大学伯克利分校的Ingres项目 8
2.5 关系数据模型的三个要素 9
2.5.1 关系数据模型的数据结构 9
2.5.2 关系数据模型的数据操作方式 10
2.5.3 关系数据模型中的完整性约束(integrity constraint) 11
2.5.4 关系型数据库的特点 11
2.6 常用关系型数据库产品介绍 12
2.6.1 关系型数据库产品的主要类型 12
2.6.2 Oraacle 13
2.6.3 DB2 13
2.6.4 SQL Server 13
2.6.5 Sybase和Informix 13
2.6.6 MySQL与PostgreSQL开源数据库 13
第3章 ER模型 15
3.1 数据库设计的主要步骤 15
3.2 ER模型的主要概念 15
3.3 ER图的表示方法 16
3.4 联系的映射约束 16
3.4.1 一对一联系 17
3.4.2 一对多联系 17
3.4.3 多对多联系 17
3.5 ER图如何转化为表 18
3.5.1 一对一联系转化为表 18
3.5.2 一对多联系转化为表 18
3.5.3 多对多联系转化为表 19
第4章 规范化理论 20
4.1 引入范式理论的原因 20
4.1.1 Insertion异常 21
4.1.2 Deletion异常 21
4.1.3 Update异常 21
4.2 第一范式 22
4.3 第二范式 23
4.4 第三范式 23
第5章 获得Oracle安装及帮助文件 25
5.1 注册OTN账号 25
5.2 下载Oracle 12c安装文件 26
5.3 获得Oracle 12c文档 26
5.3.1 下载文档 26
5.3.2 检索文档 27
5.3.3 三个重要文档介绍 28
5.3.4 查询Oracle的错误信息 28
第6章 安装Oracle 12c并创建数据库 30
6.1 安装Oracle 12c 30
6.2 创建数据库 36
6.3 删除Oracle 12c软件 44
第7章 配置和使用SQL * Plus 46
7.1 启动数据库服务 46
7.2 启动和关闭数据库 46
7.3 可用数据库用户 48
7.4 常用SQL * Plus操作 48
7.4.1 使用SQL * Plus连接到本地数据库 48
7.4.2 切换连接用户 49
7.4.3 切换数据库 50
7.4.4 查看当前连接的数据库名称 50
7.4.5 执行SQL命令 50
7.4.6 describe命令查询表的结构 51
7.4.7 修改执行过的SQL命令以重新执行 51
7.4.8 执行SQL脚本文件 51
7.5 设置SQL* Plus环境 52
7.5.1 设置每行容纳的字符数 52
7.5.2 设置查询结果的列宽 52
7.5.3 自定义SQL提示符 53
7.5.4 修改ED命令默认使用的编辑器 53
7.5.5 使用glogin.sql文件保存SQL * Plus环境配置 53
7.5.6 获得SQL * Plus环境设置帮助信息 54
第8章 SQL查询语句 56
8.1 SQL概述 56
8.1.1 SQL的历史 56
8.1.2 SQL的发音 57
8.1.3 SQL查询的特点 57
8.1.4 SQL标准 57
8.2 SQL语言的主要类型 59
8.3 常用数据类型 60
8.4 数值类型 60
8.5 字符串数据类型 60
8.5.1 早期字符编码方式 61
8.5.2 Unicode编码方式 61
8.5.3 数据库字符集与国家字符集 61
8.5.4 char(n)与varchar2 (n) 63
8.5.5 nchar(n)和nvarchar2(n) 63
8.6 日期时间数据类型 63
8.7 Oracle中的关键字 64
8.8 简单的SQL查询语句 64
8.8.1 最简单的查询——只指定表 64
8.8.2 指定列 65
8.8.3 指定列别名 65
8.8.4 指定查询条件 66
8.8.5 使用order by子句对查询结果排序 67
8.9 常用数值函数 68
8.10 字符数据的处理 69
8.10.1 字符串常量条件 69
8.10.2 字符串模糊查询 70
8.10.3 查询特殊字符 71
8.10.4 常用字符串函数 72
8.10.5 利用正则表达式搜索字符串 75
8.11 日期型数据的处理 78
8.11.1 获得当前日期时间 78
8.11.2 日期型常量 78
8.11.3 显示日期型列值 79
8.11.4 使用extract()函数抽取日期的指定部分 80
8.11.5 获取时间差 81
8.12 空值的处理 81
8.13 分组汇总查询 83
8.13.1 单独使用分组函数 84
8.13.2 与group by子句结合使用分组函数 85
8.13.3 having子句 87
8.13.4 order by子句 88
8.13.5 分组汇总查询小结 88
8.14 子查询 89
8.14.1 where子句中使用子查询 89
8.14.2 select子句中使用子查询 90
8.14.3 from子句中使用子查询 91
8.14.4 非相关子查询与相关子查询 91
8.14.5 in与not in 94
8.14.6 exists与not exists 97
8.15 集合运算 98
8.15.1 求并集union与union all 98
8.15.2 求交集intersect 98
8.15.3 求差集minus 99
8.16 多表连接查询 100
8.16.1 交叉连接 100
8.16.2 内连接 101
8.16.3 两种连接标准:SQL-86与SQL-92 103
8.16.4 外连接 104
8.17 如何构造复杂的查询语句 106
8.18 SQL查询的等效转换 109
8.18.1 内连接与子查询 109
8.18.2 in,exists,内连接,intersect 109
8.18.3 not in,not exist,外连接 110
第9章 数据修改语句 112
9.1 delete 112
9.2 update 112
9.3 insert 113
9.4 构造涉及多个表的数据修改语句 113
9.4.1 附带复杂条件的update语句 114
9.4.2 修改的新值与其他表相关 114
第10章 表及约束 115
10.1 创建简单的表 115
10.2 约束 115
10.2.1 约束的种类 116
10.2.2 创建表时附加约束 116
10.2.3 对表增加约束 119
10.2.4 删除约束 120
10.2.5 禁用和启用约束 120
10.2.6 查询约束的信息 121
10.3 修改表的结构 122
10.3.1 修改列的数据类型 122
10.3.2 添加及删除列 123
10.3.3 修改列名 123
10.3.4 修改表名 123
10.3.5 清空表:truncate table 123
10.3.6 删除表 124
10.4 回收站功能 124
10.4.1 与回收站有关的数据字典视图 124
10.4.2 查询被删除表中的数据 125
10.4.3 恢复被删除的表 126
10.4.4 如何不开启回收站功能 127
10.4.5 清空回收站中的对象 127
10.4.6 关于回收站功能的几点注意事项 128
10.4.7 恢复与表相关的索引对象 128
10.5 DDL语句的背后 129
第11章 管理表空间和数据文件 130
11.1 表空间 130
11.1.1 表空间是什么 130
11.1.2 如何创建表空间 130
11.1.3 如何把表创建于指定表空间 131
11.1.4 把表的数据移至另外一个表空间 131
11.1.5 查询表所在的表空间 131
11.1.6 表的数据存储于多个数据文件的原因 132
11.1.7 查询表空间或数据文件的系统信息 132
11.2 表空间的类型及其功能 133
11.3 存储空间如何分配 135
11.3.1 数据块、段和区 135
11.3.2 指定非默认的块大小 136
11.3.3 指定表空间的空间分配方式 136
11.3.4 观察空间分配的过程 137
11.3.5 对表分配指定大小的空间 139
11.4 删除数据时空间是否释放 139
11.5 修改表空间和数据文件的属性 141
11.6 与存储空间相关的系统信息查询 144
第12章 B树索引 148
12.1 一个使用索引的例子 148
12.2 如何创建索引 150
12.3 B树索引能把查询速度提高多少 151
12.4 B树索引的结构 153
12.4.1 如何表示表中记录的地址 153
12.4.2 B树索引的叶节点内容 155
12.4.3 B树索引的分支节点内容 156
12.4.4 Oracle如何利用索引进行查询 156
12.4.5 实验探究:验证索引叶节点及分支节点内容 157
12.4.6 哪些情况需要创建索引 159
12.5 如何知道一个查询是否使用了索引 159
12.5.1 设置SQL * Plus查看执行计划 159
12.5.2 通过查看执行计划确认是否使用索引 161
12.5.3 哪些情况不会使用索引 162
12.6 DML语句对索引的影响 162
12.6.1 insert语句对索引的影响 162
12.6.2 delete语句对索引的影响 163
12.6.3 update语句对索引的影响 163
12.7 基于函数的B树索引 163
12.8 设置索引的可见性 164
12.9 约束与索引 164
12.10 与B树索引有关的数据字典视图 165
第13章 位图索引 168
13.1 位图索引的功能 168
13.2 位图索引能把查询速度提高多少 168
13.3 位图索引占用多少空间 169
13.4 位图索引的结构 170
13.5 实验探究:验证位图索引的内容 170
第14章 管理数据库的各种文件 173
14.1 参数文件 173
14.1.1 参数文件的作用 173
14.1.2 pfile和spfile 173
14.1.3 修复spfile 174
14.1.4 参数文件的存储位置 175
14.1.5 修改参数值 176
14.1.6 如何查询参数值 177
14.1.7 有关初始化参数的帮助 178
14.2 跟踪文件 179
14.2.1 跟踪文件的位置 179
14.2.2 跟踪文件的种类 180
14.2.3 警告文件 180
14.2.4 当前会话跟踪文件 182
14.3 控制文件 183
14.3.1 控制文件的内容 183
14.3.2 控制文件的安全性保证措施 185
14.4 重做文件 188
14.4.1 重做文件的内容 188
14.4.2 实例恢复与介质恢复 189
14.4.3 重做文件组 189
14.4.4 查询重做文件信息 192
14.4.5 管理联机重做文件 192
14.4.6 移动重做文件 194
14.4.7 数据库归档模式 195
14.4.8 查询数据库归档模式 199
14.4.9 查询联机重做文件组及重做文件信息 199
14.4.10 查询归档日志文件信息 201
第15章 实例 203
15.1 内存构成部分 203
15.1.1 SGA 203
15.1.2 PGA 203
15.1.3 UGA 203
15.2 SGA构成部分 204
15.2.1 固定区域(fixed area) 204
15.2.2 数据缓冲区(database buffer cache) 204
15.2.3 Java池(Java pool) 206
15.2.4 大池(large pool) 206
15.2.5 重做缓冲区(redo buffer) 206
15.2.6 共享池(shared pool) 207
15.3 PGA的构成 208
15.3.1 私有SQL区域 208
15.3.2 SQL工作区域 208
15.4 内存管理与配置 209
15.4.1 内存自动管理 209
15.4.2 自动管理SGA 210
15.4.3 手工管理SGA 212
15.5 进程 212
15.5.1 服务器进程 215
15.5.2 后台进程 217
第16章 事务处理与锁 220
16.1 事务概念 220
16.1.1 事务应用实例1:银行转账 220
16.1.2 事务应用实例2:超市收银 221
16.2 事务的ACID属性 221
16.2.1 Atomicity——原子性 221
16.2.2 Consistency——一致性 221
16.2.3 Isolation——隔离性 222
16.2.4 Durability——持久性 223
16.3 事务控制命令 223
16.4 并发控制要解决的问题 224
16.5 解决并发问题的锁和多版本数据技术 226
16.5.1 Oracle中锁的种类 226
16.5.2 Oracle自动附加的锁 227
16.5.3 DML锁 227
16.5.4 死锁 229
16.5.5 锁的升级和转换 230
16.5.6 多版本数据技术 230
16.5.7 总结:Oracle解决三个并发控制问题的方法 232
16.6 实例恢复 232
16.6.1 checkpoint与实例恢复的关系 233
16.6.2 前滚(rollforward) 233
16.6.3 回滚(rollback) 233
第17章 网络连接 234
17.1 网络连接的几个术语 234
17.1.1 服务器与客户端 234
17.1.2 数据库服务名 234
17.1.3 监听器 235
17.1.4 专用服务器模式及专用服务器进程 237
17.1.5 共享服务器模式和共享服务器进程 237
17.1.6 服务注册 238
17.2 简单的网络连接配置 239
17.2.1 服务器端操作 239
17.2.2 客户端配置 240
17.3 共享服务器模式及专用服务器模式配置 248
17.3.1 配置共享服务器模式 248
17.3.2 在客户端指定共享或专用连接方式 253
17.4 使用非默认端口连接数据库 254
17.4.1 设置监听器 254
17.4.2 设置local_listener参数静态注册数据库服务至监听器 256
17.4.3 配置客户端连接至数据库 256
第18章 用户和权限管理 258
18.1 一个用户及权限管理的简单示例 258
18.2 用户管理 259
18.2.1 用户属性 259
18.2.2 创建用户 260
18.2.3 模式的概念 260
18.2.4 修改用户属性 260
18.2.5 删除用户 261
18.2.6 查询数据库中的用户名称 261
18.2.7 查询用户属性 262
18.2.8 数据库中的预定义用户 263
18.2.9 预置管理用户 263
18.3 权限管理 264
18.3.1 Oracle中的权限种类 264
18.3.2 系统权限 265
18.3.3 unlimited tablespace权限 265
18.3.4 sysdba和sysoper权限 265
18.3.5 数据库中的所有系统权限 265
18.3.6 对象权限 266
18.3.7 赋予系统权限 267
18.3.8 赋予对象权限 267
18.3.9 撤销用户权限 268
18.3.10 查询用户的权限信息 269
18.4 角色 271
18.4.1 public角色 271
18.4.2 角色相关信息查询 271
18.4.3 connect、 resource、 dba角色 272
参考文献 273