数据的完整性和约束性

第三章 表的操作

3.1  数据的完整性和约束性

数据库不仅仅是存储数据,它还必须保证所有的数据正确性,为了维护数据库中的完整性,在创建表的时候常常需要定义一些约束,约束可以限制列的取值范围,强制列的取值来自合理的范围。在Oracle11g中,约束类型主要包括以下几个:

非空约束   not null

主键约束   primary key

唯一约束   unique

外键约束   foreign key

检查约束   check

默认约束   default

对于约束的定义,既可以在创建表的时候进行,也可以在修改表中来进行。

1)非空约束   not null(限制必须为某个列提供值)

空值(null)是不存在的值,它既不是数字,也不是字符串。而是不存在,未知的情况。

例:创建Books表,要求BookNo(图书编号),BookName不能为null

Create table Books

(

BookNo number(10) not null,

BookName varchar2(10) not null,

author varchar2(5),

price number

);

在创建完成之后,可以使用alter table modify 来进行修改约束。

例:为Books表中price字段设置非空约束

alter table Books modifyprice not null

         表名       列名

还可以使用alter table modify 来删除表的非空约束,其实就是

alter table Books modifyprice  null

数据的完整性和约束性

数据的完整性和约束性

3.2  主键约束   primary key(用于唯一的表示表中每一行记录)

在一个表中,最多有一个主键约束,主键约束可以是一个列,也可以由两个或两个以上来组成(联合主键)。主键约束也具有非空约束的特性。

例:创建Book表,包括namenopriceauthor,其中no为主键约束

Create table Book

(

No number(10) ,

Name varchar2(10) ,

author varchar2(5),

price number

Constraint PK_NO primary key(no)

)

如果创建表的时候未定义主键约束,用户可以使用

alter table...add constraint ...primary key来添加

例:为Books表的BookNo列添加主键约束。

Alter table Books

Add constraint B primary key(BookNo);

使用alter table...drop...删除约束

例:删除Books表的主键约束

Alter table Books drop constraint B

 数据的完整性和约束性

 数据的完整性和约束性

3.3  唯一性约束

  强调所在的列不能有相同的值,可以有空值

格式:constraint 约束名unique

例:创建一个会员Numbers,并要求为该表的QQ列定义一个唯一性约束

create table Members

(

MemNo number(4) primary key,

MemName varchar2(20) not null,

Phone varchar2(20),

Email varchar2(30),

QQ varchar2(20) constraint QQ_UK unique

)

     使用alter table...add constraint.......为现有的列添加unique约束

例:为members表的email列添加唯一约束

Alter table members add constraint Email_UK unique(email);

删除email列的唯一约束

Alter table members drop constraint Email_UK;

数据的完整性和约束性

3.4  外键约束

 会使用两个表进行关联,外键是指“当前表”引用“另外一个表”(即被引用表)的某个列,而被引用的列必须具有主键约束或者唯一约束

例:利用members表创建新表m1

Create table m1

As select * from members;

设置m1QQ列引用members表的QQ

Alter table m1

Add constraint FK_QQ

Foreign key(QQ)

References members(QQ);

 数据的完整性和约束性

创建表的时候创建约束

Create table Men

(

No number not null,

QQ varchar2(20),

Constraint FK_Q foreign key(QQ) references members(QQ)

);

 数据的完整性和约束性

查看某一表中约束的名字

Select * from user_constraints where table_name=’表名’;

查看某一表中某一列的约束的名字

Select constraint_name from user_cons_columns where

Table_name=’表名’ and column_name=’列名’;

例:查看person1中约束的名字

Select * from user_constraints where table_name=’person1’;

 数据的完整性和约束性

3.5  检查约束check

  创建一个书本信息表,给价格添加check约束

Create table bookinfo

(

Bookid number,

Bookname char,

Price number,

Author char,

Constraint ck_price check (price>=10 and price<=100)

);

把表中bookid添加一个check约束

Alter table bookinfo

Add constraint CK_ID check(bookid>1 and bookid<10);

3.6  默认约束 default

  创建一个person1表,包括以下列,把年龄默认设置为18

Create table person1

(

Name varchar2(10) not null,

Id number(10),

Sex varchar2(10),

Age number(5) default 18

);

person1表的sex加入默认约束

Alter table person1

Modify sex default ‘nan’;

 数据的完整性和约束性