1 DDL
使用DDL来管理数据库的对象。
那Oracle数据库中有哪几个常用对象呢?表、视图、序列、索引、同义词、存储过程、存储函数、触发器、包、包体。
1.1 表空间
在创建表时字段可以指定哪些数据类型?如下
这里说一下ROWID,它是一个伪列
可以看到ROWID像是UUID一样是每行数据对应唯一的一个id
1.1.1 如何通过子查询创建一张表?
1.1.2 如何查看当前用户下所存在表?
语句:select * from tab;
1.2 修改表
修改表的操作:增加新列,修改列,删除列,重命名列,重命名表
1.2.1 增加新列
alter table test1(表名) add (字段名) (字段类型);
1.2.2 修改列
alter table test1(表名) modify (字段名) (字段类型);
1.2.3 删除列
alter table test1(表名) drop column (字段名);
12.4 重命名列
alter table test1(表名) rename column (原字段名) to (新字段名);
12.5 重命名表
rename (原表名) to (新表名);
1.2 删除表
语法:DROP TABLE 表名
注意一点:当我们使用这句删除表语法时,其实这张表并没有被真正的删除掉,而是相当于进入了Oracle的回收站。
那问题来了,如何查看Oracle回收站呢?
那么如何清空回收站呢?
注意:在Oracle中并不是所有人都有回收站的。管理员没有回收站,当以管理员身份drop掉一张表那么将会是永远删除。
那么如何将回收站中表给还原回来呢?
1.2.1 简单说一下Oracle11g中有几种闪回类型?
- 闪回删除
- 闪回数据归档 (Oracle10g中没有这项)
- 闪回表
- 闪回查询
- 闪回版本查询
- 闪回事务查询
- 闪回数据库
1.3 约束
检查性约束:类似Java中的枚举类来约束值的选择范围。
检查性约束的使用:
那么在创建表的时候怎么样设置约束名字呢?如下
1.3.1 唯一性约束
如果我们使用唯一性约束其实就自带索引作用
2 视图
- 视图本身是不存数据的
- 视图是能创建、删除和替换,不能修改。
- with read only表示为只读,不能修改。
- with check option表示只能处理视图范围内的数据
2.1 视图中使用DML的规定
当视图定义中包含以下元素之一时不能使用update:
- GROUP BY语句
- DISTINCT 关键字
- ROWNUM伪列
- 列的定义为表达式
3 序列
序列:可供多个用户用来产生唯一数值的数据库对象。
- 自动提供唯一的数据
- 共享对象
- 主要用于提供主键值
- 将序列值装入内存可以提高访问效率
- 上图中括号栏位为非必填项:increment by----步长:序列增长的跨度,start with—序列开始值,默认为1开始,maxvalue和minvalue为最大最小值,这里也可以设置为NOMAXVALUE没有最大,NOMINVALUE没有最小值,cycle为循环或nocycle不循环,当然序列做主键是不会循环的。cache为缓存,表示这个序列数组的长度默认20,如果nocache数组长度就是1。
- 序列创建完成之后,所有的自动增长应该由用户自己处理,所以在序列中提供了以下的两种操作:nextval:取得序列的下一个内容。currval:取得序列的当前内容
4 索引
什么情况下可以创建索引?
- 列中数据值分布范围很广
- 列经常在WHERE子句或连接条件中出现
- 表经常被访问而且数据量很大,访问的数据大概占数据总量的2%到4%
下列情况不要创建索引:
4. 表很小
5. 列不经常作为链接条件或出现在WHERE子句中
6. 查询的数据大于2%到4%
7. 表经常更新
4.0 执行计划
如何知道我们一条查询语句是否高效率?我们可以通过执行计划查看,当我们想查看某条查询语句的执行计划怎样的时候,需在这条查询select语句前加上explain plan for 执行,执行后再执行select * from table(dbms_xplan.display);
4.0.1 查看执行计划结果判断效率
4.1 单列索引
4.2 复合索引
4.3 Oracle中的索引类型
- B树(默认)
- 位图
5 同义词
同义词其实就是别名
语法:
6 触发器
数据库触发器是一个与表相关联的、存储的PL/SQL程序。每当一个特定的数据操作语句(insert、update、delete)在指定的表上发出时,Oracle自动地执行触发器中定义的语句序列。
6.1 触发器总结
6.1.1 触发器可用于
- 数据确认
- 实施复杂的安全性检查
- 做审计(日志),跟踪表上所做的数据操作等
- 数据的备份和同步
利用触发器来做审计叫“值的审计”,oracle还有其他4种审计:强制审计,标准审计(配置),细粒度审计,管理员审计
6.1.2 创建触发器
CREATE [or REPLACE] TRIGGER 触发器名
{BEFORE | AFTER}
{DELETE | INSERT | UPDATE [OF 列名]}
ON 表名
[FOR EACH ROW [WHEN(条件)]]
PLSQL块
6.1.3 触发器类型
6.1.3.1 语句级触发器
在指定的操作语句操作之前或之后执行一次,不管这条语句影响了多少行
6.1.3.2 行级触发器(FOR EACH ROW)
触发语句作用的每一条记录都被触发。在行级触发器中使用:old和:new 伪记录变量,识别值的状态。