数据库---表的完整性约束


表的完整性约束

数据库不仅仅是存储数据,它也必须保证所保存的数据的正确性。如果数据不准确或不一致,那么该数据的完整性可能会受到破坏,从而给数据库本身的可靠性带来问题。为了维护数据库中数据的完整性,在创建表时常常需要定义一些约束。通过为表中的字段定义约束,可以防止将错误的数据插入到表中。对约束的定义即可以在CREATE TABLE语句中进行,也可以在ALTER TABLE语句中进行。 

约束的定义:通过对表中的一个或多个列增加限制条件来控制表中数据的正确性和完整性。

根据增加约束的对象,约束可以分为:

列级约束:对表中的一个列增加约束条件。

表级约束:同时对表中的两个或两个以上的列增加约束条件。

备注:列约束必须跟在列的定义里后面,表约束不与列一起,而是单独定义在定义约束时,可以通过指定enabledisable关键字将约束的初始状态设置为激活或禁用状态,默认是激活状态。

定义约束的语法格式:

1利用create table语句创建约束:

1在每个新定义的列后面直接创建约束,语法如下:

Create table 表名(列数据类型(宽度)[constraint   

约束名 约束定义语句],列数据类型(宽度)[constraint    约束名    约束定 义语句],….

2所有的列都定义后在最后一个列名后创建约束,语法如下:

Create table 表名(列数据类型(宽度),列数据类型(宽度),…列数据类 型(宽度), constraint 约束名   约束定义语句)

注:(约束定义语句中只涉及对一个列的约束,而且在第一种情况下可以省略列名)

2利用alter table语句创建约束:

Alter table 表名 add  constraint   约束名  约束定义语句

注:(约束定义语句中只涉及对一个列的约束)

根据约束限制的内容,约束可以分为: 主键约束外键约束唯一约束检查约束

1、 primary key

特点如下:

    1)、定义为primary key的字段或字段组中不能包含重复值,并且不能为null.(即 满足唯一性,不能为空)

2在一个表中只能定义一个primary key的约束

3Oracle会自动为具有primarykey约束的字段添加一个唯一的索引,以及一个not null约束

如:

Create table   读者表( 借书证号  number  constraint   dzb_pk  Primary  key , 姓名  varchar2(10), 所在系 varchar2(20), 专业  varchar2(20), 班级 varchar2(20) )//列级约束(约束一列),在创建列时添加约束

Create table   图书表( 图书编号 varchar2(10), 书名 varchar2(20), 作者 varchar2(50), 出版 社 varchar2(50), 放置位置 varchar2(30), constraint tub_pk Primary  key( 图书编号 ) )

//列级约束(约束一列),在创建完列后,添加约束

Create table  借书信息表(借书证号 number,图书编号 varchar2(10) ,借书日期  date default  sysdate,借阅天数 number,constraint jsxxb_pk primary key(借书证号,图书编号,借书日期 ))

//表级级约束(约束多列),在创建完列后,添加约束

Alter table employee_history add constraint emph_pk primary key(employee_id,hire_date)

//表级级约束(约束多列),修改表添加约束

2、 foreign key

特点如下: 

1)、被定义了foreign key约束的字段的取值只能为相关表中引用的字段的值或null值。

2)、foreign key约束既可以在列级定义,也可以在表级定义。

3)、定义了foreign key约束的外键字段和被引用的主键字段可以在同一张表中,这种情况称为:自引用(构成了自关联关系)

4)、对于同一个字段可以同时定义为foreign key约束和not null约束。

注意:外键的类型、尺寸等一定要与主键完全一致。

备注: 在Oracle中级联删除有如下三值:

1、 no action 在删除一方的情况下,对多方不进行任何操作.(不能删,删的情况会出现, 违反完整约束条件的异常信息

2、 cascade

 在删除一方的时,会把多方所有与1方关联的数据删除掉。

3、 set null

         在删除一方的时,会把多方所有与1方关联的数据的字段值设置为null(注意:该字段必须允许为null 否则的话会出现无法更***为 NULL)

如:

 create table borrow1(id number(4) primary key,sid number(2) references stu(id));

//创建表时,添加外键

Alter table 借书信息表 add constraint jsxxb_dzb_fk Foreign key(借书证号 ) references 读者表(借书证号 )

//修改表时,添加外键

3、 check   

check约束是所有约束中最灵活的约束,也是最复杂的约束,check约束检查输入到表中的数据值来维护域的完整性,即检查输入的每一个数据,只有符合条件的数据才允许输入到表中.

check约束有如下特点:

(1)check约束的表达式中,必须引用表中一个或多个字段,并且表达式的运算结果必须是一个布尔值.

2Check约束即可以在列级定义,也可以在表级定义

3对于同一个字段可以定义多个check约束,而且对于同一个字段可以定义check约束和not null约束。

如:

create table students(id number(4),name varchar2(10),sex varchar2(2),age number(2),class varchar2(20),constraint stu_che check((sex='男'or sex='女')and age<30))

alter table stu add constraint stu_ck check (age>10 and age<100);

4、 unique 

特点如下:

1)如果为字段定义了unique约束,该字段不能够包含重复值

2unique约束既可以在列级定义,也可以在表级定义。

3oracle系统中被定义的unique约束会自动建立一个唯一的索引。

4同一个字段既可以在其上定义为not null 也可以建立unique约束,(为某个字段可以添加多个约束),注意:如果在一个字段仅定义了unique约束,则该字段可以包含多个null

   

Unique主要的目的是:是在保证主键列外,其它列的唯一性。

如:

create table 部门信息表(部门编号 number(2) primary key,部门名称 varchar2(20),部门主管 varchar2(10),constraint bmxxb_uniq unique(部门名称))

Alter table students add constraint stu_uni unique(id);

特点如下:

1为字段定义not null 约束后,该字段不能为null

2Not Null约束只能在列级定义

3在定义一个表中可以有多个not Null 

如:

Create table device(dev_id varchar2(4) not null,dev_name varchar2(10))

Alter table students modify id not null

5、 删除约束

 

SQL> alter table borrow drop constraint STU_FK;

 

Table altered

注意:STU_FK是约束的别名

 



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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值