• oracle(sql)基础篇系列(四)——数字字典、索引、序列、三范式


    数字字典表

    --查看当前用户下面有哪些张表

    select * from user_tables;

    select table_name from user_tables;

     

    --查看当前用户下面有哪些视图

    select * from user_views;

    select view_name from user_views;

     

    --查看当前用户下面有哪些约束

    select * from user_constraints;

    select constraint_name from user_constraints;

     

    --查看当前用户下面的约束在哪些表上面

    select constraint_name, table_name from user_constraints;

     

    --select * from dictionary;

     

    像上面这样的表被称作数据字典表,存在dictionary中。

    索引

    索引的概念

    索引是一个数据库对象,索引就相当于我们字典里那个索引;当为某个字段建立索引,查询这个字段的时候效率就会更高。

    需要注意的是,索引的建立只是提供了查询效率,修改却更慢了,因为需要附加修改索引表。

     

    什么时候建索引

    查询某个字段,访问量特别大的时候,而且效率比较低的时候,这个时候可以考虑建立索引。但不要轻易建立索引,因为建立所以也会增加而外的维护开销。

    创建索引

    --给stu表的email字段创建索引

    create index stu_email_index on stu(email);

     

    删除索引

    --删除stu表的email字段的索引stu_email_index

    drop index stu_email_index;

     

    序列

    序列的概念

    create table stu

    (

    id number(10) ,

    ...

    constraint stu_id_pk primary key(id),

    ...

    );

    在创建stu表的时候,我们制定了id作为主键,主键是唯一的,这就要求每次插入一条记录,都要插入一个新的id,但是在多线程的环境下同时插入大量记录,如何保证每次插入的id是不同的,而且这个id应该是有序递增的?一般数据库都会提供这样的机制:专门产生一个独一无二的数,然后每次自己往上递增一个1或者指定增量。Oracle里,这种机制称为序列sequence。sequence是一个对象,可以使用里面的属性nextval作为主键id的值,这就能保证主键id是唯一的。

    创建序列与查看

    --序列提供了两个属性,即NEXTVAL 和CURRVAL,用来访问序列中的序号

    --其中NEXTVAL代表下一个可用的序号, CURRYAL代表当前的序号。

    drop sequence seq;

    create sequence seq;

    select seq.nextval ,seq.currval from dual;

    SELECT * FROM USER_SEQUENCES;

    SELECT * FROM ALL_SEQUENCES;

    --sys用户查看

    SELECT * FROM DBA_SEQUENCES;

     

    --INCREMENT BY选项指定了序列中序号递增的幅度

    drop sequence seq2;

    create sequence seq2 increment by 2;

    select seq2.nextval ,seq2.currval from dual;

     

    --START WITH选项指定序列中的序号从哪个数字开始

    drop sequence seq3;

    create sequence seq3 start with 20;

    select seq3.nextval ,seq3.currval from dual;

     

    --MAXVALUE用来指定序列中序号的最大值

    drop sequence seq4;

    create sequence seq4 maxvalue 3;

    select seq4.nextval ,seq4.currval from dual;

     

    --MINVALUE用来指定序列中序号的最小值

    drop sequence seq5;

    create sequence seq5 minvalue 5;

    select seq5.nextval ,seq5.currval from dual;

     

    --选项CYCLE使得序列中的序号可以循环使用

    drop sequence seq6;

    --必须指定nocache 或者cache,否则报ORA-04013: number to CACHE must be less than one cycle

    create sequence seq6 minvalue 1 maxvalue 5 cycle nocache;

    select seq6.nextval ,seq6.currval from dual;

     

    --如果把序列中的序号放在内存中进行缓冲,那么获得序号的速度将大大加快。

    --将序列中接下来的n个序号在内存中进行缓冲,最小值为2

    drop sequence seq7;

    create sequence seq7 minvalue 1 maxvalue 30 cache 3;

    select seq7.nextval ,seq7.currval from dual;

     

    序列的修改

    --序列在创建之后,可以对其进行修改。

    --比如修改它的最大值、最小值、增幅等,但不能修改初始值。

    drop sequence seq8;

    create sequence seq8 increment by 2;

    select seq8.nextval ,seq8.currval from dual;

     

    alter sequence seq8 increment by 3;

    删除序列

    drop sequence seq;

     

    序列作为主键使用

    insert into stu(id,name,email) values(seq.nextval,'lisi','321@qq.com');

    insert into stu(id,name,email) values(seq.nextval,'wangwu','988@qq.com');

    insert into stu(id,name,email) values(seq.nextval,'chenliu','567@qq.com');

     

     

     

    三范式

    范式的由来

    数据库设计时的一些规则,而这些规则是由一个姓范的人规定的,所以叫范式。

    范式的目标

    不存在冗余数据(同样的数据不存第二遍)。

    第一范式

    第一范式的要求:1.要有主键(设计任何表都要有主键) 2.列不可分

    第二范式

    第二范式的要求:当一张表里面有多个字段作为主键的时候,非主键的这些字段,不能依赖于部分主键。简单的说:不能存在部分依赖。

    第三范式

    第三范式的要求:不能存在传递依赖(除了主键之外的其他字段必须直接依赖于主键)。

  • 相关阅读:
    通用爬虫和聚焦爬虫
    分布式缓存的介绍
    点击按钮执行后台方法
    jsp页面设置绝对路径
    vim调试
    图解Java 垃圾回收机制
    Java String 综述(上篇)
    Java 内部类综述
    深入理解Java类加载器(二):线程上下文类加载器
    深入理解Java类加载器(一):Java类加载原理解析
  • 原文地址:https://www.cnblogs.com/yachao1120/p/10065534.html
Copyright © 2020-2023  润新知