Oracle 笔记
第一节
名词解释
- 数据 (data)
- 数据库 (db)
- 数据库管理系统 (Dbms)
- 数据库系统 (Dbs)
DBS > DBMS 范围大小
关系数据模型
三要素
- 数据结构
- 关系操作
- 关系约束完整性
解释
数据结构
- 在数据库中以表的方式的存在
- 关系:一个由
行
和列
组成的二维表,每一个单元格不可分隔- 字段: 表中的每一列为一个字段(属性)
- 记录:每一行表示一个记录(元组)
关系操作
- 查询操作:
选择
投影
连接
除
并
交
差
- 更新操作:插入、删除、修改
关系约束完整性
如果一个表的主键,不能确定一条记录,那么就设定两个主键,来确定一行
- 实体完整性:
主键非空
- 参照完整性:外键必须取主键当中存在的值
任何的关系型数据库,必须满足这两条
关系与关系模型
关系模式用来描述关系
数据库的设计
基本要素
- 需求分析
- 概念结构设计
- 绘制
ER - 图
- 绘制
- 逻辑结构设计
- 把
ER - 图
转换成关系模型
- 把
- 物理结构设计
- 数据库实施
- 写 SQL 或 编程 代码
- 数据库运行和维护
实体-关系模型
E-R数据模型
- 实体 (Entity)
- 属性 (Attfribute)
- 联系(Relationship)
- 1 : 1
一对一
- 1 : n
一对多
- m : n
多对多
- 1 : 1
E - R 图的绘制
实体 - 关系图是表现实体 - 关系模型的图形工具,简称E-R图
将E-R模型转换为关系模型
实体转换为表
将E-R图中的每个实体转换成一张表,实体的属性即为表中的各个列
实体之间联系的处理
1:1
把任意一端的主键加到另外一端作为主键
1:n
把一端的主键加到多端作为外键
m:n
把两端的主键取出来作为新表的主键,联系的属性也加到新表中
第二节
Oracle 数据库的应用系统结构
分布式系统结构、客户机-服务器结构(C/S)、浏览器-服务武器结构(B/S)
Oracle 的默认用户
- sys
超级用户
- system
普通用户
- sysman
- dbsnmp
- mgmt_view
Oracle 的体系结构
物理存储结构
从物理文件角度分析Oracle数据库
文件组成
- 数据文件
.DBF
- 存放数据
- 日志文件
.LOG
- 记录并存储 => 数据库的更改信息
- 表结构修改、数据修改、均会记录到日志文件中
- 控制文件
.CTL
二进制文件
- 记录了,日志文件、数据文件的位置
- 参数文件
- 记录了,控制文件的位置、所在路径、进程信息等
逻辑存储结构
逻辑存储单元
概念:高一级的存储单元,由其低一级的存储单元构成的
划分
- 数据块
- 盘区
- 段
- 表空间
按存储单元从小到大排序为
数据块 < 盘区 < 段 < 表空间
数据块
数据块
是最小的逻辑存储单元
盘区
盘区
是磁盘空间分配的最小单元
段
由
盘区
构成,存在于表空间
分类
- 数据段
- 索引段
- 临时段
- LOB段
- 回退段
表空间
逻辑与物理的统一
分类
- SYSTEM表空间:存放系统信息
- UNDO表空间:存放撤销信息
- USERS表空间:建议用户使用的表空间
- TEMPORARY表空间:临时使用的表空间
第三节
用户
模式
表
模式
定义: 一系列逻辑数据结构或对象的集合
一个模式属于一个用户(模式名与用户名相同)
用户
创建用户
create user 用户名 Indentified by 密码
表
表是模式的对象,最基本的数据结构
数据类型
char(n)
: 固定长度的字符串,创建表的时候需要指定宽度,不够会自动补齐空格varchar2(n)
:可变长的字符型number(p,s)
:存储整数、浮点数;p是宽度、s是小数点后位数date
:日期时间类型;- 默认的日期格式:
DD-MON-YY
, - 月是英文单词的前三个字母
- 月或者是
123……12 + 月
的格式
- 默认的日期格式:
- 大型对象数据类型 BLOB二进制 CLOB……
创建表
语法格式
create table [模式名.] 表名
(
列名1 数据类型 [列约束],
列名2 数据类型 [列约束],
…………
列名n 数据类型 [列约束],
)
[pctfree integer(数字)]
[pctused integer(数字)]
[initrans integer(数字)]
[maxtrans integer(数字)]
[tablespace integer(数字)]
[storage storage_clause] -- 设置存储选项
主键约束
如果主键定义在一列上,直接在列的后面写``primary key`
如果主键定义在多列上,在所有列定义完成之后,加
primary key(列1,列2,……,列n)
外键约束
在当前表中不是主键,而是另外一个表的主键
foreign key (列名) references 参照表的表名 [(参照表的主键)]
外键定义在列的里面省略
foreign key
唯一性约束
主键以外的其他列如果要求不重复,则使用唯一性约束
区别于主键:
可以为空
可以有多个
-- 在列的后面直接写 unique -- 在下里面写的 unique(列名)
默认约束
为列设定默认值,当向表中添加数据时,如果不给值,则取默认值
default '值' / default 数值
检查约束
为列设定条件,如果不满足条件,则拒绝输入 !
check(条件) -- 在列后面加入
修改表
基本语法
alter table [模式名.] 表名 add 列名 数据类型 -- 增加一列
alter table [模式名.] 表名 add 列 约束(主键等) -- 加个约束
alter table [模式名.] 表名 modify 列名 要修改的项 -- 修改列
alter table [模式名.] 表名 drop column 列名 -- 删除一列
每次仅可执行一个
删除表
drop table 表名
第四节
修改SQL数据与SQL*Plus命令
添加数据
insert into `表` (列名1……) values (值1……) | select query
-- select query 可以将查询结果,插入到对应的表中
情况
- 列名全部指定:可以改变列名的顺序
- 省略一部分列名:省略的列或者允许为空、或者有默认值
- 不指定列名:按表的定义的顺序给值
- 返回多行(子查询):列的类型、数量要相匹配
更新数据
update `表名` set `列名1……` = 值1……,`列名2……` = 值2……,…… [| select query] where 条件
-- select query 可以查询赋值
情况
- 省略where:指定列的值全改
- 使用表达式指定新值
- 同时改多列
- 子查询只能
删除数据
使用delete
delete from `表名` where 条件
使用 truncate
删除一个表的所有数据,表结构不变。功能 <=> 没有条件的 delete
- 无法撤销,不在日志中记录,所以较快
truncate `表名`;
第五节 查询
简化的查询表达式
select 选择列表
from 表名
[where 条件]
[group by 分组表达式]
[having 分组条件]
[order by 排序字段 [asc] [desc]] -- 省略默认升序 desc 降序
select 子句
查询所有的列
select * from `table`
查询多列
select conlum1, conlum2, conlum3 …… from `table`
列的重命名
select conlum1 as alias1, conlum1 as alias1 …… from `table`
查询去重
select distinct conlum1, distinct conlum2 …… from `table`
where 子句
比较运算符
=、!=、<>、>、>=、<、<=
范围运算符
between and -- ……与……直间
逻辑运算符
and or not not > and > or -- 优先级排序
列表运算符
in -- 查找属于指定集合的记录 -> x in (1,2,3,4,5,6,7) -- 等价于多个or逻辑查询
模式匹配运算符
select
- 下划线:任意一个字符
- 百分号:任意一个字符串
判断某一列空
select * from `table` where `id` is null [is not null]
第五节课
使用统计函数查询
主要的统计函数
求和: SUM(ALL | DISTINCT 列名)
平均: AVG(ALL | DISTINCT 列名)
最大: MAX(ALL | DISTINCT 列名)
最小: MIN(ALL | DISTINCT 列名)
计数: COUNT(ALL | DISTINCT 列名)
count(*)
分组查询
使用 GROUP BY 子句时,表单式之后,结果值相等的为一组
select 的列名 要与 group by 后的列名相同 (除统计函数外)