oracle 完整性约束

完整性的定义

    是为保证数据库中数据的正确性和一致性。

分类

   域完整性,实体完整性、参照完整性和用户定义完整性。

    1.实体完整性   指关系的主关键字不为空且不重复     

              primary key  主键

    2.域完整性 保证表中数据的合理性  

              check     检查

              default   默认

              not null  不为空

              unique    唯一约束

    3.参照完整性   指建立两个关系建立联系的主外键的约束

             foreign key  外键

    4.用户自定义完整性 除了上述关键字,可以使用触发器来编写约束

在创建表的时候添加约束

   示例1  创建一个学生信息表,学号为主键,姓名不为空,性别只能为男或女,年龄在6岁到34之间,家庭地      址默认为‘山东’, 

     create table student_info(

       stuid   number primary key,                 --只将stuid设为主键

       name    varchar(30) not null,               --学生姓名不可以为空

       sex     char(2) check(sex in( '男','女')),

       age     number(2) check(age between 6 and 34),

       loc     varchar(30) default '山东'

     );

     desc student;   --查看表的结构

    除了使用上面直接加在字段名之后的约束外,还可以使用约束子句  constraint

    约束子句的语法:CONSTRAINT [constraint_name] CHECK (condition);

   示例2 创建一个职工信息表,职工号为主键,职工姓名,性别为男或者女,年龄必须大于18,学历可以为             ‘高中’或‘大学’或‘无学历’。

      create table emp_info1(

        empid number,

        name varchar(30),

        sex char(2),

        age number(2),

        edu varchar(20),

        constraint chk_empid1 primary key(empid),          --主键约束,可以把多个字段设为主键

        constraint chk_sex1 check (sex in('女','男')),     --check约束

        constraint chk_age1 check (age>=18),              

        constraint chk_edu check (edu in ('高中','大学','无学历'))

        );

     备注:约束名不可以与其他表的约束名重复,不然会提示  ORA-02264: 名称已被一现有约束条件占用

           constraint子句可以写在字段名的后面。

           比如

               create table emp_info1(

               empid number  constraint chk_empid1 primary key,

               name varchar(30),

               sex char(2),

               age number(2) constraint chk_age1 check (age>=18)

               );

在创建完表后添加约束

    创建完 一学生表之后,给此表添加一些约束

stuid

 name age sex birthday

   create table stu(    --此表没有任何的约束

       stuid number,

       name  varchar(20),

       age number(2),

       sex char(2),

       birthday date

     );

示例3 给上面的表添加 主键约束  (把studi设为主键)

   alter table stu  add contraint pk_stuid primary key(stuid);

示例4 给上面的表添加 check约束  (插入的年龄必须大于19岁)

   alter table stu  add contraint chk_age check(age>19);

示例5 给上面的表添加 非空约束   (要求姓名不能为空值)--非空约束与其他的不一样

   alter table stu modify name not null;

示例6 给上面的表添加 唯一约束    (要求姓名不可重复)

   alter table stu add constraint uni_name unique(name);


外键约束   用来建立表和表之间联系

 学生表stu_info     学号 stuid,姓名 name,专业 major   

 成绩表score_info   编号 sno  ,学号stuid,科目 course,分数 score

 示例7 在创建表的时候添加外键约束

 create table score_info(

   sno number primary key,

   stuid number,

   course varchar(20),

   score number,

   constraint fk_stuid  foreign key(stuid)  references stu(stuid)  --设为外键,关联stu_info(stuid)

   );

 示例8 在创建完表后添加外键约束

    alter table score_info add  constraint fk_stuid  foreign key(stuid)  references stu(stuid);

禁用约束:

ALTER TABLE 表名 DISABLE CONSTRAINT  约束名;

启用约束:

ALTER TABLE 表名 ENABLE CONSTRAINT 约束名;

删除约束:

ALTER TABLE 表名 DROP CONSTRAINT 约束名;


转载于:https://my.oschina.net/u/2339999/blog/416457

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值