博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Oracle数据库的约束,序列,索引
阅读量:4968 次
发布时间:2019-06-12

本文共 3055 字,大约阅读时间需要 10 分钟。

约束

 

 

  1:概念:也叫完整性约束条件。

      是数据表中的一些限制条件,当数据表中的数据发生变化时,必须遵循

      这些限制条件,不遵循,不能进行DML操作。

  2:分类

    (1)非空约束 not null 简称UN

    (2)唯一性约束 unique 简称UK

    (3)主键约束 primary key 简称PK

    (4)外键约束 foreign key 简称FK

    (5)检查约束 check 简称CK

  3:非空约束的建立

    建表时:

    reg:create table tname(

        name varchar2(20) not null,

        age number(3) constraint tname_age_NN not null--列级约束

      );

    约束:列级约束和表级约束两种写法

       列级约束:就是在建表时写在列类型后面。

       表级约束:就是在建表时写在最后一个字段后。

       非空约束没有表级约束的写法。

    建表后修改非空约束:

      解除非空约束:

        alter table tname modify age number(3) null;

      添加非空约束:

        alter table tname modify age number(3) not null;

  4:唯一性约束:unique

    对字段进行此约束时,字段的值是唯一的,不能重复,可以为null。

    reg:

      create table temp_101(

        name varchar2(20) not null,

          idcard varchar2(30),

        constraint t_idcard_uk unique(idcard)--表级约束写法

      );

    建表后设置唯一性约束:

      alter table temp_101 add constraint t_idcard_uk unique(idcard);

  5:主键约束:(非空且唯一)

    主键:是一张表中能给记录唯一标识的字段,通常此字段除了作为唯一标识符,没有其他意义。

    (1)一张表中只能有一个主键约束。其他约束没有个数限制。

    (2)主键约束相当于非空约束和唯一性约束

    (3)主键要选择表中尽可能没有数据逻辑的字段。

  --建表时:

    create table tname(

      id number(3) primary key,

      name varchar2(20)

    );

  6:外键约束

    两张表的两个字段存在关系或者一张表的两个字段的关系。

    其中表B的一个字段的值依赖表A一个字段中的某一个值或者可以为null。

    那么:

    表A叫主表、父表

    表B叫从表,子表

    建表时:

    create table tname(

      empno number(4) primary key,

      mgr number(4),

      constraint te_mgr_fk foreign key(mgr) references tname(empno)

    );

    create table temp(

      empno number(4) primary key,

      mgr number(4) reference temp(empno)

    );

    建表后:

    create table temp_1(

      in number(4),

      mgr number(4)

    );

    alter table temp_1 add constraint t_107_mgr_fk foreign key(mgr) reference temp(empno);

  7:检查约束

    对某一字段或某些字段做一些条件的限制,必须满足条件的可以DML。

    建表时:

    create table temp_108(

      name varchar2(20),
      gender char(1) check(gender in('f','m'))
    );
    insert into temp_108 values ('张三','f');
    create table temp_109(
      name varchar2(20),
      sal number(9,2) check(sal>1000 and sal<10000)
    );

    

    建表后:

    create table temp_110(
      name varchar2(20),
      gender char(3)
    );
    alter table temp_110 add constraint t_gender_ck check(gender ='女' or gender='男');

 

序列

 

 

  1:概念

    是数据库中为数据表提供的可以自动生成的唯一数值,通常用来给主键字段赋值,可以递增或者递减,作为主键的字段,通常不认为赋值,需要使用序列自动生成的值。

  2:关键字

    sequence,序列和表一样,都是数据库中的对象,通常序列为一张表提供主键值,也可以为多张表提供主键值。

  3:序列的创建  

    create sequence seqName

    [start with i] -->从i开始,不指定时默认从1开始

    [increment by j] -->每次递增或递减j/默认递增1,j为正表示递增,为负表示递减

    [maxvalue m | nomaxvalue]-->表示最大值m

    [minvalue n | nominvalue]-->表示最小值n

    [cycle | nocycle]-->表示循环|不循环

    [cache n| nocache]-->表示缓存n个数,默认存储20个数

   两个伪列:nextval:下一个值,currval:当前值,此伪列只有在使用了nextval之后才可以使用。

 

索引

 

 

  1:

    作用:为了方便快速查找数据表中的记录。

    索引也是数据库中的一个对象。

    索引内部信息包含记录的rowid,相当于地址信息。

  2:

    索引被创建后,由数据库自动维护。

  3:

    创建:create [unique] index indexName on tname(colName,[,......]);

  4:

   索引的优缺点:

      当数据表需要频繁进行DML操作时,此时数据库会自动维护索引

      会增加开销,索引索引的使用需要看表的操作情况

    

 

转载于:https://www.cnblogs.com/lyr999736/p/9046498.html

你可能感兴趣的文章
es安装elasticsearch-sql插件
查看>>
广播信道--CSMA/CD协议
查看>>
第二十六课
查看>>
Python基础之字符串拼接简单介绍
查看>>
redis-pipeline
查看>>
计蒜客---最大子阵列
查看>>
matlab的conv2、imfilter、filter2
查看>>
弗洛伊德算法(Floyd)
查看>>
xFire 开发web services
查看>>
设计类图
查看>>
ios中将事件添加到系统日历
查看>>
类对象
查看>>
ios 上架流程
查看>>
ajax连接池和XMLHttpRequest
查看>>
[Voice communications] 声音的滤波
查看>>
BZOJ.3139.[HNOI2013]比赛(搜索 Hash)
查看>>
BZOJ.4316.小C的独立集(仙人掌 DP)
查看>>
json在线解析
查看>>
Git的优势
查看>>
《需求规格说明书》业务描述活动图
查看>>