1 Oracle安装注意事项
版本问题 :
10g: (gid) 700M
11g (grid) 3G 给了2个zip,需要解压在一起
解压后的源文件目录不能有空格或汉字
安装目录不能带有空格或汉字
2 Oracle数据文件类型
- DBF 数据文件
- CTL 控制文件
- LOG 日志文件
3 工具
- SQLPlus 管理员首选
- DBCA 数据库管理助手
- NCA 网络配置助手
4 表空间
数据库下最大的逻辑存储单元
默认表空间
- system : 默认的系统表空间,通常用于存储数据字典内容 大小会影响系统性能
- systemaux : 扩展的系统表空间10g之后才有的 , 为新功能使用
- users: 用户表空间,除系统默认用户外使用
- temp:临时表空间 供交换数据使用
- undo: 回滚表空间,用户删除后存储(类似于回收站空间)
- example:示例表空间 系统如果安装了example示例数据库及用户所占空间
创建表空间 必须是管理员才有权限
命令:
1
2
3
4create tablespace 表空间名(如:tbstest)
datafile '文件存储路径'(如:D:\oradata\orcl\tbstest.dbf)
size 文件大小(如:10m)
autoextend on
5 Oracle驱动安装及配置
导入依赖
1 | <!-- https://mvnrepository.com/artifact/com.oracle.database.jdbc/ojdbc8 --> |
properties配置
1 | oracle.jdbc.driver.OracleDriver : |
6 模式(schma)
用户及其所有对象的集合(table,constrain,column,index,sequence,view,procedure,function,游标,程序报(package),触发器)
用户名即模式名
一个用户对应一个模式
7 相关关系
一个数据库服务器可以安装n个实例
一个实例对应一个数据库
一个数据库含有n个用户,每个用户对应一个模式
8 关于权限
创建用户:create user 用户名 identified by 密码 default tablespace 默认的用户表空间
授权:
1
2
3grant 角色1 , 角色2 to 用户名
例如: grant connect , resource to j2008
grant select|insert|update|delete on 表名 to 用户名权限:
- 系统权限:例如 create session,create table
- 系统角色:connect ,resource
- 对象权限:依附于某个对象(表,视图,过程,函数等)
授权规则:
系统权限或角色,只有管理员才能授权(system,sys)
对象权限对象所有者授权
在级联授权中,例如: A用户–>B用户–>C用户
如果是系统权限,当B失去权限时,C用户权限有效
如果是对象权限,当B失去权限时,C用户权限失效
9 ddl语法
ALTER
- 添加字段
- 修改数据类型
- 添加约束
TRUNCATE & DROP & DELETE 区别
- truncate 截断表:干掉表中数据,但保留数据结构,且不用记录日志,因此数据不可恢复
- drop 删除对象(表,用户,过程,函数等) 记录操作日志 可恢复
- delete 删除数据,干掉数据 保留结构 记录操作日志 可恢复
10 日期类型
- date & timestamp
- date’日期字符串’ 例如 : date’2021-02-03’
- to_date(‘日期字符串’,’日期模板’) 例如: to_date(‘2021/02/03’,’YYYY/MM/DD’)
11 复杂查询结构
1 | select 字段列表 |
带有分组查询的显示字段只有三种情况:常量,分组函数,分组字段
12 经典查询
- 养成从客户角度去思考sql指令的习惯
- 子查询需要下功夫
- 递归表的查询(自上而下,自下而上)
- 去重
- 行列倒置
13 视图
视图分为三级
- all_:管理员
- dba_ : 管理员有权访问
- user_:普通用户访问
14 锁与实务
- 事务ACID
- 锁 是事务内在原理 ,事务是锁的外在呈现
- commit 提交并释放锁
- rollback 回滚 并释放锁
15 序列
能够创建一组连续 数字的对象
语法:
1 | CREATE SEQUENCE toys_seq |
特点:
在Oracle中没有自增列特性,可以使用序列实现列自增或自减
在Oracle中一个表可以由n个自增列,在mysql只能由一个列自增
一个序列可用于不同的列不同的表的列
序列的定义存放在user_sequences数据字典中
常用操作:
- 查看序列下一值: select 序列名.nextval from dual
- 查看序列当前值: select 序列名.currval from dual
修改序列定义
除start with 起始值不可修改以外 ,其他属性都是能改的
16 表分区
为什么要使用表分区
- 单表数据记录大于1500万-2000万
- 单表数据空间占用大于2G以上
- 客户仅仅对部分表数据感兴趣,其他基本处于历史状态
- 非常明显的数据操作特征
分区分类
- 从9i版本开始,不断在分区领域扩张
- mysql8.0之前的版本没有分区,sqlserver2016前没有分区
常见分区:
- 范围分区:按照某列值的取值范围做的分区操作
复合分区
如果一次分区不能缓解使用效率 二次分区(复合分区)
- 范围+hash
- 范围+list
维护分区
- 添加分区
- 删除分区
- 合并分区
- 拆分分区
- 截断分区
17 视图
- 优势:
- 提供了另外一种级别的表安全性(通过 单视图授权实现)
- 隐藏的数据的复杂性
- 简化的用户的SQL命令
- 隔离基表结构的改变
- 通过重命名列,从另一个角度提供数据
视图分类
简单视图:单表视图 基表是一个表
- 继承基表的约束(主键、字段约束等)
- 对视图的操作等价于对单表的操作
复杂视图:基表为两个以上表或视图
键保留表
定义:视图主键所在的基表就是键保留表
如果修改的字段属于键保留表的字段 则允许修改 ,否则不允许
对于复杂视图无法通过视图来修改非键保留表字段(如因业务需求无法满足必须通过视图修改,则需要触发器实现)
18 索引
特点
- 索引占用空间的
- 索引是双刃剑,在提升查询性能同时会降低修改的效率
- 减少IO操作
- 经常谈及的SQL优化均是围绕着索引的应用展开的
什么场景下建什么样的索引(sql优化的基本原理)
- 列值数量/记录数 如果趋近于0 则适合于创建位图索引;反之适合建唯一索引
- 在查询条件所在列建标准索引或函数索引
- 如果查询条件为字符串字段,适合建函数索引(UPPER函数)
- 在多表关联时 (外键)字段适合建标准索引
- 如果列的取值是连续的 且经常作为查询条件的话,此列可建反向键索引
索引的使用限定
- 单表索引数不大于5个
- 如果查询未使用索引,应该使索引无效(不再降低修改的效率)
索引原理
- B+结构原理
查询优化的本质就是避免语法导致索引失效
19 PL/SQL基础
Procedure Language / Structure Query Language
记名块:过程、函数、程序包、触发器 可以多次调用
不记名块:只能执行一次
语法:
1 | declare |
给变量赋值
- 变量 := 值
- select 值 into 变量 from 表;
属性类型
定义不知道类型的数据时,可以使用
1
变量名 表名.表中数据名%type
某字段类型:为了冗余后期字段数据类、大小的变化
例如:name dept.dname%type name变量的类型及大小随着dpet.dname而变
某记录类型:冗余 字段增减 而设
例如:rec dept%type ; rec 指向dept的一条记录
20 游标
定义
一段格式化的内存 例如:JAVA编程 resultSet集合封装的游标
游标的属性:notfound、rowcount、found
隐式游标
oracle默认游标名sql
自动打开自动关闭 isopen 一直为false
notfound当操作影响了行数 则为false,否则为true
found与notfound相反
rowcound累计值
显式游标
- 声明游标
- 打开游标
- 提取记录
- 关闭游标
21 存储过程
语法
1 | create or replace procedure 过程名 (入参类型。。。) |
参数类型
1 | IN 输入类型 |