oracle---约束(primary key,unique,not null,check,foreign key)

[code]
约束分为以下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;
[/code]
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值