oracle外键约束,级联操作,序列,索引,视图,分页,表备份

--外键约束(一般建议在项目中不用,谁用最后谁会哭)

     --使用条件:发现在插入表数据时发现不同的表数据之间存在依赖关系的校验。

     --如何选取外键:一般将父表的主键作为子表的外键使用


     --优缺点:
     --优点:避免了垃圾数据的产生
     --缺点:使用了主外键关联的表,父表中的数据不能直接删除


     --使用级联操作
         --添加外键约束时最后加上 on delete cascade 在父表执行删除动作时,会自动的将子表中关联的数据删除。
         --在添加外键约束时最后加上 on delete set null
       
  --添加方法3种,
     --1.直接在字段后添加
       create table usre(
         usid varchar2(10) reference usre22(ussid) ,
                                    --表名 --字段名
         ........   
       );
    --2.在创建表的后面
        create table usre(
            usid varchar2(10),
         ......
         constraints fk_usre_usid foreign key(usid) reference usre22(ussid),
        );
    --3.在创建表的后面
         create table usre(
             usid varchar2(10),
         ......
          ); 
         alter table usre add constraints fk_usre_usid foreign key(usid) reference usre22(ussid);

级联:
   --CASCADE指当删除主表中被引用列的数据时,级联删除子表中相应的数据行。在父表执行删除动作时,会自动的将子表中关联的数据删除
   alter table usre add constraints fk_usre_usid foreign key(usid) reference usre22(ussid) on delete cascade;


   --SET NULL指当删除主表中被引用列的数据时,将子表中相应引用列的值设置为NULL值。SET NULL有个前提就是外键引用列必须可以设置为NULL。
   alter table usre add constraints fk_usre_usid foreign key(usid) reference usre22(ussid) on delete set null;
   

 --序列

     --作用:序列自增作为主键来使用
     --使用:其实就是创建了一个具备初始值,并且可以指定自增的变量
     --语法规范:
              --create sequence 表名_字段名;默认自增+1
    -- 属性值(可以省略写)
       --increment by  步长 ,默认值是1
       --start with    初始值,默认值是0
       --maxvalue      最大值,很多99999····
       --minvalue      最小值,默认值是1
    --注意;
    --1.序列其实就是创建一个可以自增的变量和表没有直接关系,只是恰好作为主键使用
    --2.序列的初始值为表数据的最大主键值+1
   ----创建序列
   create sequence usre_usid;--创建默认序列
   
    --查询序列当前值
    select usre_usid.currval from dual;
  
   --序列自增
     select usre_usid.nextval from dual;
   --创建自定义序列 
      create sequence usre_usid
      increment by 1
      start with 11
      maxvalue 666666

 

      minvalue 1;

 

 

    --使用序列作为主键值使用
    insert into usre values(usre_usid.nextval,'Oracle','2222')
    
    --索引
        --给指定的字段创建索引目录,提升检索效率

 

        --注意:索引是显式的创建,隐式的调用,主键会默认创建索引

 

 

        --创建单字段索引

 

        create index index_emp_empno on emp(sal);

 

 

        --创建排序索引

 

        create index index_emp_mgr on emp(mgr desc);

 

 

        --创建多字段索引

 

        create index  index_mgr_sal on emp(mgr,sal);       

 

      

        --删除索引

 

        alter index index_emp_empno;

 

 

  --视图
        --作用和特点

 

         --保护表中的重要数据和字段

 

                 --简化多表查询操作

        --给指定的表创建指定的视图

     --create view 视图名 as 查询语句

     create view v_emp as select * from emp;

 

  --多表的视图

    create view v_ed4 as (select e.name,d.* from dept d,emp e where e.deptno=d.deptno);

 

   --删除视图中的数据

   delete from v_emp where empno='8888';

 

   --更新视图中的数据

   update v_emp set sal=3500 where empno=7369;

 

   --删除视图
   drop view v_emp;

   
   --数据库的分页
   --rownum:oracle的伪列,用来表示行号
   --注意:
   --1、rownum的值是动态改变的,只和数据的位置相关
   --2、rownum不能够进行>,>=;=关系运算
   
   --使用rownum关键字显示查询结果集的行号
   select rownum,e.* from emp e;
   
   --使用rownum关键字获取前N条数据
   select rownum,e.* from emp e where rownum=4;--错误
   select rownum,e.* from emp e where rownum>5;--错误
   
   --将emp表进行分页查询,每页5条数据,查询第二页的数据
     select rownum,e.*from emp e where rownum<=15
     minus --使用minus做数据的减法实现
     select rownum,e.* from emp e where rownum<=10;
     
   --使用rownum关键进行多次查询
   select m.* from (select rownum r,e.* from emp e where rownum<=10)m where r>5; --没有排序的分页
   select * from (select rownum r_outer,m.* from (select rownum r_inner,e.* from emp e order by sal) m where rownum<=10);--排序后的分页

 

    

 

备份      

----使用plsql工具备份
   --备份表结构

 

      --工具中的导出用户对象,导出选择的指定表结构,导出的是sql文件。

 

 

   --备份表结构和表数据

 

      --工具导出表,导出的是dmp文件,二进制文件

 

 

   --备份表数据
      --备份查询到的数据
      
----使用oracle命令进行备份

 

     --使用导出命令 exp

        -- 1 将数据库TEST完全导出,用户名system 密码manager 导出到D:\daochu.dmp中

 

 

           exp system/manager@TEST file=d:\daochu.dmp full=y

 

 

        -- 2 将数据库中system用户与sys用户的表导出

 

           exp system/manager@TEST file=d:\daochu.dmp owner=(system,sys)

 

 

        --3 将数据库中的表table1 、table2导出

 

           exp system/manager@TEST file=d:\daochu.dmp tables=(table1,table2) 

 

 

        -- 4 将数据库中的表table1中的字段filed1以"00"打头的数据导出

 

           exp system/manager@TEST file=d:\daochu.dmp tables=(table1) query=\" where filed1 like  '00%'\"

 

 

     --使用导入命令 imp
        -- 1 将D:\daochu.dmp 中的数据导入 TEST数据库中。
             imp system/manager@TEST  file=d:\daochu.dmp
             上面可能有点问题,因为有的表已经存在,然后它就报错,对该表就不进行导入。

 

             在后面加上 ignore=y 就可以了。

 

 

        -- 2 将d:\daochu.dmp中的表table1 导入
           imp system/manager@TEST  file=d:\daochu.dmp  tables=(table1) */
      

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值