Oracle学习第九课-视图,序列,索引,事务【Oracle暂时结束】
视图(View)
关键词: view
创建视图: create view 视图名 as select语句
含义: 将select语句的查询结果,作为视图,可以供查询使用.
使用视图: view 就是一个虚拟表.
select 列名,列名,列名 from 视图名;
优点:
简化SQL语句.
安全性,对开发人员屏蔽掉表和字段信息.
注意:
视图提高查询效率 [错误说法]
视图本质就是存储了select语句, 视图基本不会占用硬盘空间.
删除视图: drop view 视图名;
序列(sequence)
概念: oracle提供的工具,产生一系列连续且不重复的值.
创建序列:
create sequence 序列名 [start with 数字]
使用序列获得值:
序列名.nextval -- 从序列中获取一个值并展示出来. -- 查询序列中的值 select 序列名.nextval from dual; -- 应用: 添加数据保证id主键是不重复? insert into 表名 values(序列名.nextval,......);
删除序列
drop sequence 序列名
索引 Index[重要]
问题: 数据量1000w(Oracle)会出现查询效率急剧降低?
作用: 提高select查询效率.
核心思路:
创建索引: create index 索引名 on 表(字段)
相当于: create index 索引名 on 字典表(拼音)
使用索引: 不需要手动使用, 默认使用索引字段为条件进行查询时,数据库会自动使用索引查找数据.
删除索引: drop index 索引名;
索引特点:
索引会占用硬盘空间.
增删改操作,会牵涉索引的修改和维护, 降低了DML的效率.[缺点]
PK(Primary key) UK(unique key) 主键和唯一约束的列,数据库会自动添加索引.
事务[重要]
问题:
-- 张三将工行账号60000转给李四? account:[id,name,birth,mobile,balance] id, name, birth, mobile, balance 100 张三 --- 15533333333 60000 101 李四 --- 15566666666 600000
思路: 1. 将张三balance 修改为0? -60000 update account set balance = 0 where id = 100; 2. 将李四的balance 修改为 660000 update account set balance = 660000 where id = 101; 问题: 多个sql语句,完成一个独立功能,出现了完成一半,影响功能的实现!!!! 希望: 1. 转账操作多个sql执行成功 √ 2. 转账操作多个sql执行全部失败 √ 总结: 转账中的多个sql,要么全部成功,要么全失败!----将转账中的多个sql看做一个整体.概念: 数据库的最小执行单元,有多个sql组成的一个整体
事务中的sql执行结果: 要么全部执行成功,要么全部执行失败.
结论: 实际开发中,一个独立的功能中,包含的多个SQL,要作为一个事务来操作.
事务的使用(边界):
成功结束事务: commit(提交);-- 事务中多个sql执行生效.
失败结束事务: rollback(回滚);-- 事务中的多个sql执行失效.
类似于Java中的try-catch
try{ 1张三将工行账号60000转给李四? update account set balance = 0 where id = 100; 2. 将李四的balance 修改为 660000 update account set balance = 660000 where id = 101; 成功结束事务: commit 提交. }catch(){ 失败结束事务: rollback 回滚. }
事务的实现原理
数据库会为每个客户端都分配一个独立的回滚段(临时空间 rollback seagment), 临时存放当前客户端sql执行结果.
commit: 将回滚段中的sql执行结果一次性同步到数据库中.
rollback: 将回滚段中sql的执行结果,舍弃丢失.
事务特性 ACID: [笔试]
A (Atomic) 原子性: 事务中的多个sql语句是一个整体, 要么全部成功,要么全部失败.
C (Consistency) 一致性: (数据的合理性),事务执行前后(无论失败还是成功),最终数据是合理的.
I (Isolation) 隔离性: 事务与事务之间是相互独立的.
D (Durability) 持久性: 事务结束(成功或失败),对数据库的数据修改时永久性的.