简介:一个oracle服务器由 一个oracle数据库+多个oracle实例构成
Oracle 很庞大 占用很多内存和cpu
sql
字符和日期要包含在单引号中
排序 order by asc desc
函数 分为 单行函数 多行函数
函数可以没有入参 但是必须要有返回结果
单行函数 包括
字符函数 lower('') trim('')
日期函数
数字函数 select trunc(2.345,2) from dual //dual是伪表,用来测试函数和表达式
转换函数(显式to_char()/隐式)
通用函数 NVL(expr1,expr2) :判断某个值是否为空值,若不为空值则输出,若为空值,返回指定值。
嵌套函数(由内向外执行)
If-else-then
两种使用方式
1.case when then when then else end sql99语法
2.decode(xxx,0,0.0,1,1.1,2,2.2,333) 函数 oracle语法
分组函数
作用于一组函数,对一组数据返回一个值.
会忽略空值,AVG(NVL(col,0))这样就不会忽略
常用的:
AVG 平均值
COUNT 计数
MAX 最大值
MIN 最小值
SUM 求和
DISTINCT 去重关键字
Group by 子句 :在select列表中所有未包含在组函数中的列都应该包含在group by 子句中。
Having 子句:过滤分组 ---相应的 where子句不能使用组函数
表的别名:1.简化查询 2.使用表前缀能提高执行效率 3. 用了别名不能用真名
多表查询
等值连接 不等值连接 外连接(+) 自连接
内连接 查询满足条件的
外连接 查询所有
左外(可省略)连接 满足条件+左不满足 left outer(可省略) join
满外连接 full outer join
子查询
子查询在主查询之前执行
子查询要包含在括号中
单行操作符: > < =
多行操作符:in any all
集合运算
Union 去重
Union all 直接相加
Intersect 交集
Minus 差集 返回属于第一个的集合但不属于第二个集合的记录
注意:order by 要放到最后,集合的类型和个数 要一致
DML 数据操作语言 manipulation 增删改 insert delete update
从其他表拷贝数据用子查询 不需要values
DDL 数据定义语言 definition 创建管理表 create alter drop truncate rename
DCL 数据控制语言 control commit ;Savepoint xxx 创建保存点 ;Rollback to xxx 回滚到保存点
数据库事务 组成:一个或多个dml + 一个ddl +一个dcl
隔离级别:一个事务与其它事务隔离的程度
没有这个 会发生
脏读:对于两个事物T1, T2, T1读取了已经被T2更新但还没有被提交的字段.之后,若T2回滚,T1读取的内容就是临时且无效的.
不可重复读:对于两个事物T1, T2, T1读取了一个字段,然后T2更新了该字段.之后,T1再次读取同一个字段,值就不同了.
幻读:对于两个事物T1, T2, T1从一个表中读取了一个字段,然后T2在该表中插入了一-些新的行.之后,如果T1再次读取同一个表,就会多出几行.
隔离级别越高,数据一致性越好,但并发性越弱
隔离性:
数据库系统必须具备隔离并发运行各个事务的能力,使他们不会相互影响,避免各种并发问题。
4种隔离级别
Read uncommitted 读未提交数据
Read committed 读已提交数据
Repeatable read 可重复读
Serializable 串行化
Oracle 支持两种 Read committed(默认) Serializable
Mysql 支持四种 默认 Repeatable read
常见的数据库对象
表
视图 从表中抽出的逻辑上相关的数据集合 view
序列 提供有规律的数值 共享 主键值 放入内存可提高效率 sequence nextval currval
回滚,系统异常,多表同时使用 会造成裂缝
索引 提高查询效率
有必要创建索引的三种情况:
- 列中数据值范围很广
- 列经常在where子句或者连接条件中出现
- 表经常被访问且数据量很大,访问数据大概占2%-4%
没必要创建索引:
- 表很小
- 列不常在where子句或者连接条件中出现
- 查询的数据量大于2%-4%
- 表常更新
同义词 给对象起别名 synonym
Pl/sql
declare
变量,光标,例外 申明。 %:取已有表字段的类型
begin
DML语句
exception
例外处理语句
end;
if语句
1. if 条件 then 语句1;else(可省略) 语句2;end if;
2. if 条件 then 语句1;elsif 语句 then 语句; else 语句;end if;
循环语句
1. while 条件 loop 语句; end loop;
2. for i in ('1','2','3') loop 语句; end loop;
3. loop exit[when 条件]; 语句; end loop;
光标:cursor 用于存储一个查询返回的多行数据
定义 cursor c is select ..
打开 open c
使用 fetch c into xx
关闭 close c
存储过程 可以没有反参 procedure
存储函数 有反参 function
触发器 跟表关联的pl/sql程序 当对这个表做特定操作,oracle自动触发程序。 Trigger
触发器使用场景:
- 数据确认
- 实施复杂的安全性检查
- 做审计,跟踪表上所做的数据操作
- 数据的备份和同步