码迷,mamicode.com
首页 > 数据库 > 详细

Oracle学习系列7

时间:2016-05-07 18:19:57      阅读:246      评论:0      收藏:0      [点我收藏+]

标签:

    
Oracle学习系列7
************************************************************************************
            
关联表的约束:
    强制删除关联表中的父表:
        drop table tab_name cascade constraint ; 
        
    约束本身是可以修改的,但是不建议修改约束
    

知识点:
        
        1,掌握视图的作用及定义
        2,掌握序列的使用:SEQUENCE
        3,掌握PowerDesigner设计工具的使用
        4,了解同义词,了解用户管理,了解嵌套表及可变数组
        5,理解数据库的设计范式


--------------------------------------------------------

        1,视图:
            
                封装了一条复杂的查询语句
                
            语法:
            
                create view view_name 
                    as 子查询  
                    {with check option | with read only } ; //不能更新视图的创建条件,不能更改视图数据
                    
            建立一个视图,此视图包含了全部部门20的信息:
                create view view_emp20 
                    as  
                        select  empno,ename, job,hiredate 
                            from emp 
                                where deptno=20 ;
                                
            查询视图:
                
                sele * from view_emp20 ;
                
            删除视图:
            
                drop view view_name ;
                
                ex: 
                    drop view view_emp20 ;
                
                
            完整语法格式:
            
                create or replace view  view_name
                    as 子查询   //系统会为用户自动进行删除及重建的功能
                    
                    
            ex:
                create or replace view view_emp20
                    as 
                        select d.dname, count(e.empno), avg(e.sal), avg(months_between(sysdate,e.hiredate)/12) years
                            from emp e, dept d
                                where e.deptno=d.deptno
                                     group by d.dname ;
                
                更新视图:
                    
                        修改视图中7369的部门编号:
                            update view_emp20 
                                set deptno=30
                                    where empno=7369; //提示更新成功,但是视图表中无编号7369的雇员


--------------------------------------------------------
序列(重点)

    在oracle完成自动序列增长的功能,则只能依靠序列完成
    格式:
            
        create sequence  seq_name 
            [increment by n] [start with n]
            [{maxvalue n |nomaxvalue}]
            [{minvalue n | nominvalue }]
            [{cycle | nocycle}]
            [{cache n | nocache }];
            
        删除:
            drop sequence seq_name
        
        
        
        
        
        ex:创建一个myseq的序列,验证自动增长的操作:
        
            create sequence myseq  increment by 2;
            
            在序列中提供两种操作:
                nextVal:取得序列的下一个内容
                currVal:取得序列的当前内容
                
                
            创建表test_seq:
                create table test_seq(
                 
                        curr number,
                        next number
                
                );
                                                                                
            使用序列:
                insert into test_seq(curr,next)
                    values(myseq.currval,myseq.nextVal)  ;

--------------------------------------------------------
同义词(了解):
        
        功能:可以让其他用户通过一个名称方便的访问‘user.table_name’.
        
        语法:
        
            create  synonym  syn_name  for  user.tab_name  ; //建立
            
            drop  synonym syn_name ;   //删除
            
        ex: create synonym   dual  for sys.dual ;
            
            ------------------------------------------
        
            select  sysdate from dual ;//dual是张虚拟表
            
            conn sys/change_on_install as sysdba ;
            select * from tab 
                where TNAME=DUAL;//在sys用户下存在此表
                

--------------------------------------------------------
用户管理(了解):

        语法:    
            create user user_name  identified by passwd //创建用户(sys用户权限)
                [default tablespace  default_tablespace]
                [temporary tablespace  temporary_tablespace ]
                
            grant 权限1,权限2,权限3.. to user ;//给用户授权   create session
            
            alter user user_name identified by passwd_new ; //修改用户密码
            
         eg:
             create user kevin  identified by root ;
            grant  conncet, resource to kevin ; 
            
        角色:connect 、resource   //每个角色有好多不同的权限
/锁住用户:
            alter user user_name  account  lock /unlock;
            
            eg: 
                alter user kevin account lock /unlock ;
                
                
                
                授权emp表:
                    grant 权限1,权限2  on   user_name.tabl_name  to user_name ;
            将scott用户下的emp表的查询权限及删除权限给kevin:
                    grant select ,delete on scott.emp to kevin;
                    
                    
                回收权限:
                    
                    revoke 权限1,权限2,.. on  user.tab_name  from user_name ;
                    
                    eg:
                        revoke select ,delete on scott.emp from kevin ;
                                                     
                                        
        grant/(revoke)  权限1,权限2,权限3   on  user.tab_name  to / (from)  user_name ;                    
                                                    
--------------------------------------------------------

数据库的备份与恢复(了解):

        数据库备份: exp
        
                D:\data>exp         
                
        数据库恢复:    imp        
                        
                D:\data>impf    

        查看错误:show error 
--------------------------------------------------------
嵌套表(了解):

            在一个表中包含另外一个子表
        //创建project_ty类型
        create type project_ty as object(
        
                proid number(4),
                proname  varchar(50),
                prodate date 
        
        ) ;
        /                 //最后一个‘/‘ 不可少
        
        
        //使用porject_nt类型
        create type project_nt as table of project_ty;
         /                    //最后一个‘/‘ 不可少

        create table department(
        
                deptno  number(2) primary key not null,
                dname   varchar2(50) not null,
                projects   project_nt
        
            ) nested table projects store  as project_nt_tab_temp ;


        对于插入数据来讲,需要指定每个project_ty的数据类型
        insert into department(deptno,dname,projects)
            values(
                1,技术部,
                project_nt(
                    project_ty(1001,erp,sysdate),
                    project_ty(1002,crm,sysdate),
                    project_ty(1003,oa,sysdate),
                
                )
            
            );


        查询:
            select * from department ;

        若此时需要查看一个部门的全部项目的话,则需要查询嵌套表:
            select * from table( select projects from department where deptno=1 ) ;

        更新:
        update table (select projects from department where deptno=1 ) pro
            set values(pro )=project_ty(1001,测试项目,to_date(2016-02-12,yyyy-mm-dd))
                    where pro.proid=1001 ; 


--------------------------------------------------------
可变数组(了解):
        
        属于嵌套表的升级版,在可变数组中手机上就是将内部的嵌套表的内容的长度进行了限制。
        
        //定义类型
        create type worker_info as object(
        
            id        number,
            name    varchar2(50),
            sex     varchar2(6)
        
        );
        /
        
        //定义数组类型
        create type worker_info_list as varray(10) of worker_info ;
        /


        //创建可变数组表
        create table department(
        
            deptno        number(2)    primary key not null,
            dname        varchar2(50)    not null,
            workers        worker_info_list
        
        );

        
        //插入数据
        
        insert into department(deptno,dname,workers)
            values( 20,后勤部,
                worker_info_list(
                    worker_info(1,dustin,F),
                    worker_info(2,kevin,F),
                    worker_info(3,allen,M)
                
                ) 
            
            );


--------------------------------------------------------

数据库设计范式(了解):

        1.第一范式(确保每列保持原子性)
        2.第二范式(确保表中的每列都和主键相关)
        3.第三范式(确保每列都和主键列直接相关,而不是间接相关)
            

--------------------------------------------------------

数据库设计工具(重点):
            powerDesigner工具的使用

 

Oracle学习系列7

标签:

原文地址:http://www.cnblogs.com/mitnick/p/5468830.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!