约束分为以下5种: 主键 ---唯一(表中只有一个主键),非空,不重复 唯一约束 检查约束: 检查一个列的内容是否合法 |---例如:年龄:0~150岁 非空约束 外键约束: 在两张表中进行约束的操作 create table person( pid varchar2(10) primary key ) Oracle错误信息: ORA-0001:违反唯一性约束条件(SCOTT.SYS_C005270) 错误信息上给出的是一个编号的形式,实际上此编号就是表示约束的名称,是系统分配的名称 如果我们想自己去定义这个名称呢? 使用constraint create table person( pid varchar2(10), constraint person_pid_pk primary key(pid) ) Oracle错误信息: ORA-0001:违反唯一性约束条件(SCOTT.person_pid_pk) create table person( pid varchar2(10), name varchar2(20) not null, //因为非空约束在数据库的错误信息会明确指出来,所以也就没必要用constraint重命名了 constraint person_pid_pk primary key(pid) ) 唯一约束也是可以重命名 create table person( pid varchar2(10), name varchar2(20) unique not null, constraint person_pid_pk primary key(pid) ) create table person( pid varchar2(10), name varchar2(20) not null, constraint person_pid_pk primary key(pid), constraint person_name_uk unique(name) ) 检查约束: check create table person( pid varchar2(10), name varchar2(20) not null, age number(3) not null check(age between 0 and 150), sex varchar2(2) default '男' check(sex in ('男','女','中')), constraint person_pid_pk primary key(pid), constraint person_name_uk unique(name) ) 因为错误信息也是自动的一个名字,所以我们可以重命名 create table person( pid varchar2(10), name varchar2(20) not null, age number(3) not null , sex varchar2(2) default '男' , constraint person_pid_pk primary key(pid), constraint person_name_uk unique(name), constraint person_age_ck check(age between 1 and 150), constraint person_sex_ck check(sex in ('男','女','中')) ) 主外键约束(foreign key)---正对两张表的约束 如果在一张表中有外键,那么插入这张表的数据时,这个外键必须存在,如果外键没有 则不能插入,会报错说:找不到父项关键字 create table book( bid number primary key, bname varchar2(5) not null, pid varchar(18), constraint person_book_pid_fk foreign key(pid) references person(pid) //想成挂载到person表的pid上,作为一个叶子节点 ) 删除时候,先删除子表再删除父表。。。 如果我想不管外键直接删除怎么办。。。 添加的时候如果没有父亲,当然无法挂载啦 drop table person cascade constraints; //级联的翻译不好,翻译成忽略约束吧 如果希望一个表中的数据在删除时,可以自动删除掉其对应子表记录,则就可以使用级联删除操作,需要在定义表时候做出来 create table book( bid number primary key, bname varchar2(5) not null, pid varchar(18), constraint person_book_pid_fk foreign key(pid) references person(pid) on delete cascade//当删除父亲的时候,对应的孩子也会被删除 ) 修改约束:(了解) 此时,需要为表中添加若干个约束,添加约束的语法如下: alter table 表名称 add constraint 约束名称 约束类型(约束字段) 删除约束: alter table book drop constraint book_pid_fk;