常用的约束:
1、非空约束 not null
2、唯一性约束(可以为空,除空之外的其他数据必须唯一) unique
3、主键约束(唯一+非空) primary key
4、外键约束 foreign key
5、检查约束 check
约束可以在创建表时添加,也可以表创建完成后添加。
一、主键约束
主关键字约束指定表的一列或几列的组合的值在表中具有惟一性,即能惟一地指定一行记录。每个表中只能有一列被指定为主关键字,且IMAGE 和TEXT 类型的列不能被指定为主关键字,也不允许指定主关键字列有NULL 属性。主关键字最多由16个列组成。
创建表时添加主键:
SQL> create table cla
2 (class number(2) constraint PK_ClaClass primary key,
3 num number(2));
添加一个主键约束:
SQL> alter table stu
2 add constraint PK_StuName primary key(name);
二、外键约束
外关键字约束定义了表之间的关系。当一个表中的一个列或多个列的组合和其它表中的主关键字定义相同时,就可以将这些列或列的组合定义为外关键字,并设定它适合哪个表中哪些列相关联。
①、外关键字约束的作用还体现在,当删除/更新主关键字列的某值时,如果与之相关联的表中的列有删除/更新的主关键字列值相同的值时,系统会拒绝删除/更新。
SQL> delete from cla where class=1;
delete from cla where class=1
*
ERROR at line 1:
ORA-02292: integrity constraint (SCOTT.FK_STU_CLA_CLASS) violated - child
record found
②、外关键字约束的作用还体现在,当向含有外关键字的表插入数据时,如果与之相关联的表的列中无与插入的外关键字列值相同的值时,系统会拒绝插入数据。
SQL> insert into stu values('a',1);
insert into stu values('a',1)
*
ERROR at line 1:
ORA-02291: integrity constraint (SCOTT.FK_STU_CLA_CLASS) violated - parent key
not found
③、与主关键字相同,不能使用一个定义为 TEXT 或IMAGE 数据类型的列创建外关键字。外关键字最多由16 个列组成。
创建一个外键:
SQL> alter table stu
2 add constraint FK_stu_cla_class foreign key (class) references cla (class);
注:删除时级联(on delete cascade)和置空(on delete null)
删除时级联,这样再删除主关键表的某行时,外关键表的对应行也会被删除
SQL> alter table stu
2 add constraint FK_stu_cla_classes foreign key (class) references cla(class) on delete cascade;
Table altered.
SQL> delete from cla where class=1;
1 row deleted.
SQL> select * from stu;
NAME CLASS
-------------------- ----------
b 2
c 3
删除时置空,这样再删除主关键表的某行时,外关键表的对应行置空
SQL> alter table stu
2 add constraint FK_STU_CLA_CLASS2 foreign key (class) references cla(class) on delete set null;
SQL> delete from cla where class=2;
1 row deleted.
SQL> select * from stu;
NAME CLASS
-------------------- ----------
b
c 3