数据的完整性和约束性
第三章 表的操作
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表,包括name,no,price,author,其中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;
设置m1的QQ列引用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’;