完整性约束
数据库中的数据正确性和相容性,用来防止想数据库中添加不合语义的数据.
表级别约束 : 定义在一个表中,可用于表中多列
列级别约束 : 对表中的一列进行约束,只能应用一列
-
约束的用途分类:
-
- primary key (主键约束)
主键是由一列或多列组成,唯一标识
在一个表中,只能定义一个主键约束
不能重复,并且不能包含null.
2.foreign key (外检约束)
外键引用另一个表中的一列,取值范围只能是引用中以存在的值
在使用外键约束的时候,被引用的列应该具有主键约束,或者具有唯一性约束.
3.unique (唯一约束)
只能存储唯一的值,可以存储null
oralce将会自动为unique的列创建一个唯一索引
可以在同一个列上建立not null和unique约束(主键约束)
4.not null (非空约束)
指定一列不允许存储空值,这就是一种强制的检查约束
5.check (检查约束)
指定一列的值必须满足某种条件
在check约束的表达式中,必须引用表中的一个或多个列,并且表达式的运算结构是一个布尔值.
一个列中可以定义多个检查约束
检查约束可以定义在表和列上.
- primary key (主键约束)
SQL> alter table book4 modify bookname not null;
表已更改。
SQL> desc book4;
名称 是否为空? 类型
----------------------------------------- -------- ----------------------------
BOOKID NOT NULL NUMBER(10)
BOOKNAME NOT NULL VARCHAR2(40)
AUTHOR VARCHAR2(40)
PRESS VARCHAR2(40)
BOOKPRICE NUMBER(4,2)
PRESSTIME DATE
SQL> alter table book4 modify bookname null;
表已更改。
SQL> desc book4;
名称 是否为空? 类型
----------------------------------------- -------- ----------------------------
BOOKID NOT NULL NUMBER(10)
BOOKNAME VARCHAR2(40)
AUTHOR VARCHAR2(40)
PRESS VARCHAR2(40)
BOOKPRICE NUMBER(4,2)
PRESSTIME DATE
添加主键:
create table table_name(
id number(10) primary key,
...
)
为已经创建的表添加主键约束
alter table table_name add constraint pk_… primary key(列名)
alter table table_name add primary key(列名)
删除约束
alter table table_name drop constraint 约束的名称;
检查约束
create table book(
age number(3) constraint ck_age check (age>0)
)
SQL> alter table book4 add constraint ck_book4_price check(bookprice>10);
表已更改。
创建外键:
-- Create the table in the specified schema
CREATE TABLE classes
(
classid number(10) NOT NULL PRIMARY KEY, -- primary key column
cname NVARCHAR2(50) NOT NULL,
stunum NVARCHAR2(50) NOT NULL
-- specify more columns here
);
CREATE TABLE student(
sid number(4),
sname varchar2(30),
classid number(10) references classes(classid)
);
为已有表添加外键:
alter table student add constraint fk_student_cid foreign key(classid) references classes(classid)
引用类型:
cascade
~ 如果定义外键约束时使用cascade关键字,那么当父表中被引用列删除时,子表中对应的数据将同时被删除.
set null
~ 当删除父表中引用列数据的时候,子表中的数据列将被设置成null
no action
~ 当删除父表中数据会被提示违反外键约束.
禁用和激活约束
SQL> insert into book4(bookid,bookname,bookprice) values(2,'aa',-5);
insert into book4(bookid,bookname,bookprice) values(2,'aa',-5)
*
第 1 行出现错误:
ORA-02290: 违反检查约束条件 (SYSTEM.CK_BOOK4_PRICE)
SQL> alter table book4 disable constraint ck_book4_price;
表已更改。
SQL> insert into book4(bookid,bookname,bookprice) values(2,'aa',-5);
已创建 1 行。
启用
SQL> alter table book4 enable constraint ck_book4_price;
表已更改。
查询当前用户下所有约束
select * from user_constraints;
hnkj
create table user()tablespace hnkj
** 创建用户,创建表空间只有管理员可以创建