完整性约束条件

本文深入探讨了数据库中完整性概念及其实现方式,包括实体完整性、域完整性、参照完整性和用户定义完整性,并通过实例展示了如何在创建表时添加各种约束。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

完整性的定义
    是为保证数据库中数据的正确性和一致性。
分类
   域完整性,实体完整性、参照完整性和用户定义完整性。

    1.实体完整性   指关系的主关键字不为空且不重复     
              primary key  主键
    2.域完整性 保证表中数据的合理性  

              check     检查
              default   默认
              not null  不为空
              unique    唯一约束
    3.参照完整性   指建立两个关系建立联系的主外键的约束
             foreign key  外键
    4.用户自定义完整性 除了上述关键字,可以使用触发器来编写约束

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

create table student_info(
    stuid number primary key,
    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 约束名;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值