Oracle数据库(二)数据库对象和数据库设计

一、常用数据库对象

1、序列(自增列sequence)

(1)定义

        Oracle数据库(二)数据库对象和数据库设计_第1张图片

(2)说明

       Oracle数据库(二)数据库对象和数据库设计_第2张图片

(3)使用

  • myseq.nextval:下一个值;
  • myseq.currval:当前值;
  • 序列的作用:就是实现一个自增长的列,比如主键列;
  • 序列的裂缝产生:系统异常;回滚操作;多表公用一序列;

2、***同义词(别名)

  • create public synonym myemp for scott.emp;
  • 作用:方便其他用户来访问 scott 的 emp 表;
  • 说明:oracle 独有,了解即可; 

3、视图(封装复杂查询)

(1)定义

     Oracle数据库(二)数据库对象和数据库设计_第3张图片

(2)scott用户创建视图授权

conn sys/change_on_install as sysdba;
grant create view to scott;

(3)视图的更新

  • 一般来讲涉及多表的视图无法更新数据,单表的视图可以,且更新视图会更新数据来源表的数据
  • 视图尽量只做数据的呈现,不做数据的修改,因为限制很多; 
  • 在对视图进行增删改的操作的时候会自动加上视图的创建条件(where子句)

      

  • 建议创建只读视图 

       

4、索引(目录)

(1)定义

--单列索引
create index sal_index on scott.emp(sal);
--复合索引
create index sal_index on scott.emp(sal,deptno);

(2)说明

  • 数据量大且数据的更新不频繁的情况下使用索引很好;
  • 数据量大更新也比较频繁,要求能够更快的检索和统计,只能牺牲实时性,用两张表,一张建立索引,一张记录更新的信息,最后在夜间进行表的更新操作;
  • 索引是通过建立二叉树的原理来实现的;

5、用户管理

(1)用户创建 

        

(2)授予权限:授予角色后需要重启生效

          Oracle数据库(二)数据库对象和数据库设计_第4张图片

(3)用户删除

drop User cat cascade;

(4)总结:系统权限(connect|resource|dba)、对象权限(create table)、grant和revoke

6、数据库备份

(1)数据的导入和导出(基本不用)

        Oracle数据库(二)数据库对象和数据库设计_第5张图片

(2)数据库的冷备份(关闭服务器,进行备份)

         Oracle数据库(二)数据库对象和数据库设计_第6张图片

          Oracle数据库(二)数据库对象和数据库设计_第7张图片

 

二、数据库设计

###基本原则

  • 满足业务需求的同时减少多表查询和复杂查询

1、第一设计范式

  • 数据表中的每个字段都不可再分,数据使用标准类型(number、varchar2,date),使用单表

2、第二设计范式

  • 理解为多对多的关系
  • 多对多要建立中间表

3、第三设计范式

  • 一对多关系;优先使用;

4、powerdesigner使用

  • 在多方建立外键指向一方的主键

 

三、PLSQL编程

1、基本语法

(1)作用:sql语言的过程化,实现更加复杂的功能

(2)PLSQL块

declare
/*申明部分*/
begin
/*程序正文*/
exception
/*异常的处理部分*/
end;

(3)小知识点

  • select into 语法;
  • 变量赋值用:=;比较相等用 =

2、记录型和引用型变量

(1)记录型概念:逻辑相关的数据集合;类似于 java 中的类的概念;

(2)记录型语法:myemp emp%rawtype

        Oracle数据库(二)数据库对象和数据库设计_第8张图片

(3)引用型概念:声明的时候取其他数据的类型

(4)引用型语法:mysal emp.sal%type(mysal 和 emp 中 的 sal 类型相同)

3、流程控制

(1)条件控制

  • if....then....end if
  • if.....then...else...end if
  • if.....then.....elsif.....then....else......end if

(2)循环语句

  • 第1种

    Oracle数据库(二)数据库对象和数据库设计_第9张图片

  • 第2种

    Oracle数据库(二)数据库对象和数据库设计_第10张图片

  • 第3种

      Oracle数据库(二)数据库对象和数据库设计_第11张图片

4、游标(Cursor)

(1)作用:类似于 java 中的集合,可以存储查询返回的多条数据;

(2)使用:类似于集合和遍历

  Oracle数据库(二)数据库对象和数据库设计_第12张图片

5、异常处理

(1)系统异常

  • 常见的

Oracle数据库(二)数据库对象和数据库设计_第13张图片

  • 使用

Oracle数据库(二)数据库对象和数据库设计_第14张图片

(2)自定义异常

     Oracle数据库(二)数据库对象和数据库设计_第15张图片

 

四、存储过程

1、概述

  • 概念:就是一组能够完成特定功能的 sql 语句集

2、创建

Oracle数据库(二)数据库对象和数据库设计_第16张图片

3、调用

Oracle数据库(二)数据库对象和数据库设计_第17张图片

4、说明

  • 存储过程和存储函数的区别,函数有返回值;
  • 但是二者都有 in | out 参数,通过 out 可以实现返回多个值;
  • 用存储过程就可以了,函数能实现的过程都能实现;
  • 了解 java 怎么调用存储过程;

五、***存储函数

1、创建

(1)原函数

Oracle数据库(二)数据库对象和数据库设计_第18张图片

 (2)存储过程替换

Oracle数据库(二)数据库对象和数据库设计_第19张图片

2、调用

Oracle数据库(二)数据库对象和数据库设计_第20张图片

 

六、触发器

1、概述

(1)概念

  • 触发器是表关联的存储的PL SQL程序,在对表进行增删改的操作时会自动执行;

(2)作用

  • 安全检查;
  • 数据确认;
  • 数据跟踪;
  • 数据备份和同步;

2、类型

(1)语句级触发器

  • 不管语句影响了多少行,都只在语句执行前或者后执行一次;

Oracle数据库(二)数据库对象和数据库设计_第21张图片

(2)行级触发器

  • 语句影响一行执行一次;

Oracle数据库(二)数据库对象和数据库设计_第22张图片

(3)触发器中出啊语句与伪记录变量的值

Oracle数据库(二)数据库对象和数据库设计_第23张图片

3、实际应用

  • 使用序列和触发器模拟 mysql 中的自增效果
create table user(
    id number(6) not null,
    name varchar2(30) primary key
)

 

create or replace trigger user_trigger
before insert on user
for each row
begin
    select user_seq.nextval into :new.id form dual;
end user_trigger;

 

 

 

你可能感兴趣的:(数据库)