2017-04-23,周日整理

  SCM项目告一段落,这一周学习内容很多,oracle数据库从基础到高级都提及到了一些,加深了对数据库的深层次理解。下面就是这一周的学习总结:

  1. 首先是oracle数据库的安装,由于10G版本对于系统的兼容性要求很高,需要配置很多文件,很繁琐,所以直接安装11G 64Bit版本,安装很顺畅,按照安装向导安装成功,需要注意的是管理员口令需要记牢,scott用户需要解锁,因为学习的时候要用到scott用户中的4个基本表格,emp,dept,salgrade,bonus.
  2. 数据库基本概念
    1. 数据库db和数据库管理系统dbms,dbms用来对db进行统一的完整的管理和控制。
    2. 数据库的发展经历了层次模型,网状模型和关系模型三个阶段,现在普遍使用关系型数据库管理系统。
    3. 关系数据库的逻辑模型叫做实体-关系模型(entity-relationship)图,简称ER图,实体,属性,关系。实体有三种关系,一对一,一对多,多对多。
    4. 规范化:第一范式(1NF),表中的字段都是单一属性的,不可再分的。第二范式(2NF),表中不存在非关键字段对任意一候选关键字段的部分函数依赖,即所有非关键字段都完全依赖于任意一组候选关键字。第三范式(3NF),在第三范式的基础上,表中不存在非关键字段对任一候选关键字段的传递函数依赖,
    5. SQL语言按功能可分为DDL语言(数据库定义语言,增删改数据库对象),DML语言(数据库操作语言,增删改查数据),DCL语言(数据库控制语言,权限授权等)和数据库事务处理语言四个类别。
    6. DML语句规则:
      1. 可以进行+ - * / ,空值参与运算,结果变为空值,||除外。
      2. order by , group by , and , or , not , between...and... , like , is null, is not null, any, all, exists, 
      3. to_char , to_date, to_number, nvl(), decode()
      4. 联合查询:内连接 inner join ... on ...      外连接 left join,  right join,  full join,  会将左表不符合联合条件的也查询出来。    相等连接,不等连接,自连接。
      5. 在分组查询中,组函数的约束应该放在having 关键字后。
      6. rownum,虚列,只存在于结果表中,在oracle中用来实现分页查询。
      7. 两条查询语句得到的结果表还可以集合运算,相并--union all,相减minus,相交intersect。
    7. DDL语句规则:
      1. 可以通过对表格字段添加约束保证数据的完整性和唯一性。primary key, not null, unique, check(), foreign key.
      2. view 视图,通过视图来实现复杂查询的简单化,并且还能保护数据。视图只允许查询。
      3. alter table xxx add constraint fk_yyy foreign key references aaa(yyy);
  3. pl/sql
    1. 基本语法:
      declare
        --声明部分
      begin
        --代码部分
      end;
      --流程控制语句
      if ... then
      elsif ... then
      else
      end if;
      --循环语句
      loop
      exit when ...;
      end loop;

       

    2. 两种特殊的数据类型:%type, %rowtype,根据表格来定义变量类型,用于接收select语句的结果。
    3. 在代码块中执行DML语句时,若是一条记录的数据,则会自动产生一个隐式游标,接收最近一条记录的数据,该游标名字为sql,它有一些属性可以用来获得语句的执行信息。
    4. 自己定义的显式游标:1.cursor xxx  2.open xxx   3.用fetch...into...拿到游标里的数据  4.close xxx 关闭游标,用for循环可以简化步骤。
    5. 存储过程procedure。返回多条数据用:sys_refcursor
    6. 函数function。
    7. 包头package,包体package body。
    8. 触发器,用来生成日志信息,create or replace trigger xxxtrig after delete or insert or update on xxx for each row declare begin end;
    9. 创建序列,create sequece idseq start with 1 increment by 1 nocycle nocache;   下一个:idseq.nextval    现在的:idseq.currval
    10. 异常处理,exception when xxx then  when others then ...     有时候异常处理会影响到return语句,可以把需要异常处理的部分单独放到一个代码块中,即代码块的嵌套。
    11. 集合数据:
      1. 自定义记录,type 类型名称 is record( ...  );
      2. 索引表,type 索引表名 is table of 存放数据的类型 index by 索引的类型; 
      3. 记录表,存放记录的索引表
    12. 批处理forall, bulk collect.
    13. 动态执行excute immediate str...
  4. 事务处理
    1. set transaction isolation level read commited...
    2. commit  rollback  ...
  5. 优化
    1. oracle在执行一个sql语句之前,首先要分析一下语句的执行计划,然后再按照执行计划去执行,分析语句的执行计划是由优化器(Optimizer)来完成的。简单来说,Optimizer就是Oracle在执行SQL之前分析语句的工具。
    2. Oracle索引:
      1. 索引是建立在表的一列或多个列上的辅助对象,目的是加快访问表中的数据(加快查询)。
      2. 索引在逻辑上可以分为单列索引,多列索引,唯一索引,非唯一索引。在物理上分为:B*-Tree索引,反向索引,位图索引。
      3. 单列索引create index name_index on emp(ename);  复合索引(多列)create index emp_ind on emp(ename,job);
  6. oracle体系结构和用户权限
    1. TODO

 

 

posted @ 2017-04-25 15:56  寻方  阅读(120)  评论(0编辑  收藏  举报