Oracle初识

Oracle 笔记

第一节

名词解释

  1. 数据 (data)
  2. 数据库 (db)
  3. 数据库管理系统 (Dbms)
  4. 数据库系统 (Dbs)

DBS > DBMS 范围大小

关系数据模型

三要素

  1. 数据结构
  2. 关系操作
  3. 关系约束完整性

解释

数据结构

  • 在数据库中以表的方式的存在
  • 关系:一个由 组成的二维表,每一个单元格不可分隔
  • 字段: 表中的每一列为一个字段(属性)
  • 记录:每一行表示一个记录(元组)

关系操作

  • 查询操作:选择 投影 连接
  • 更新操作:插入、删除、修改

关系约束完整性

如果一个表的主键,不能确定一条记录,那么就设定两个主键,来确定一行

  • 实体完整性:主键非空
  • 参照完整性:外键必须取主键当中存在的值

任何的关系型数据库,必须满足这两条

关系与关系模型

关系模式用来描述关系

数据库的设计

基本要素

  1. 需求分析
  2. 概念结构设计
    • 绘制 ER - 图
  3. 逻辑结构设计
    • ER - 图 转换成关系模型
  4. 物理结构设计
  5. 数据库实施
    • 写 SQL 或 编程 代码
  6. 数据库运行和维护

实体-关系模型

E-R数据模型

  1. 实体 (Entity)
  2. 属性 (Attfribute)
  3. 联系(Relationship)
    • 1 : 1 一对一
    • 1 : n 一对多
    • m : n 多对多

E - R 图的绘制

实体 - 关系图是表现实体 - 关系模型的图形工具,简称E-R图

无标题

将E-R模型转换为关系模型

实体转换为表

将E-R图中的每个实体转换成一张表,实体的属性即为表中的各个列

实体之间联系的处理
  1. 1:1

    把任意一端的主键加到另外一端作为主键

  2. 1:n

    把一端的主键加到多端作为外键

  3. m:n

    把两端的主键取出来作为新表的主键,联系的属性也加到新表中

第二节

Oracle 数据库的应用系统结构

分布式系统结构、客户机-服务器结构(C/S)、浏览器-服务武器结构(B/S)

Oracle 的默认用户

  1. sys 超级用户
  2. system 普通用户
  3. sysman
  4. dbsnmp
  5. mgmt_view

Oracle 的体系结构

物理存储结构

从物理文件角度分析Oracle数据库

文件组成

  1. 数据文件 .DBF
    • 存放数据
  2. 日志文件 .LOG
    • 记录并存储 => 数据库的更改信息
    • 表结构修改、数据修改、均会记录到日志文件中
  3. 控制文件 .CTL
    • 二进制文件
    • 记录了,日志文件、数据文件的位置
  4. 参数文件
    • 记录了,控制文件的位置、所在路径、进程信息等

逻辑存储结构

逻辑存储单元

概念:高一级的存储单元,由其低一级的存储单元构成的

划分

  1. 数据块
  2. 盘区
  3. 表空间

按存储单元从小到大排序为

数据块 < 盘区 < 段 < 表空间

数据块

数据块 是最小的逻辑存储单元

盘区

盘区 是磁盘空间分配的最小单元

盘区 构成,存在于表空间

分类
  1. 数据段
  2. 索引段
  3. 临时段
  4. LOB段
  5. 回退段
表空间

逻辑与物理的统一

分类
  1. SYSTEM表空间:存放系统信息
  2. UNDO表空间:存放撤销信息
  3. USERS表空间:建议用户使用的表空间
  4. TEMPORARY表空间:临时使用的表空间

第三节

用户 模式

模式

定义: 一系列逻辑数据结构或对象的集合

一个模式属于一个用户(模式名与用户名相同)

用户

创建用户

create user 用户名 Indentified by 密码

表是模式的对象,最基本的数据结构

数据类型

  1. char(n) : 固定长度的字符串,创建表的时候需要指定宽度,不够会自动补齐空格
  2. varchar2(n):可变长的字符型
  3. number(p,s):存储整数、浮点数;p是宽度、s是小数点后位数
  4. date:日期时间类型;
    • 默认的日期格式:DD-MON-YY,
    • 月是英文单词的前三个字母
    • 月或者是 123……12 + 月 的格式
  5. 大型对象数据类型 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 可以将查询结果,插入到对应的表中

情况

  1. 列名全部指定:可以改变列名的顺序
  2. 省略一部分列名:省略的列或者允许为空、或者有默认值
  3. 不指定列名:按表的定义的顺序给值
  4. 返回多行(子查询):列的类型、数量要相匹配

更新数据

update `表名` set `列名1……` = 值1……,`列名2……` = 值2……,…… [| select query] where 条件
-- select query 可以查询赋值

情况

  1. 省略where:指定列的值全改
  2. 使用表达式指定新值
  3. 同时改多列
  4. 子查询只能

删除数据

使用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 
  1. 下划线:任意一个字符
  2. 百分号:任意一个字符串

判断某一列空

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 后的列名相同 (除统计函数外)

原文地址:https://www.cnblogs.com/JQ04/p/14987892.html