oracle入门之 DDL数据定义语句(二)

四、约束:对数据库的字段加的限制

(1)主键约束(primary key)

特点:值唯一,且为非空,一个表智能有一个主键
列级实现:在创建列时同时创建主键
由系统提供主键名:create table s_emp(id number primary key,name varchar2(20));
指定主键名:create table s_emp (id constraint s_emp_id_pk primary key,name varchar2(20));
表级实现:先创建列,然后创建主键
一般形式:create table s_emp(id number,name varchar2(20),constraint s_emp_id_pk primary key(id));
联合约束(多个字段共同组成主键):create table s_emp(id number,name varchar2(20),constraint s_emp_id_name_pk primary key(id,name));


(2)唯一性约束(unique)

特点:值唯一
列级实现:
由系统提供唯一性约束名:create table s_emp(id number unique,name varchar2(20));
指定唯一性约束名:create table s_emp(id number constraint s_emp_id_uq unique,name varchar2(20));
表级实现:
一般形式:create table s_emp(id number,name varchar2(20),constraint s_emp_id_uq unique(id));
联合约束形式:create table s_emp(id number,name varchar2(20),constraint s_emp_id_name_uq(id,name));


(3)非空约束(not null)

特点:值非空
列级实现:
由系统提供非空约束名(常用形式):create table s_emp(id number not null,name varchar2(20));
指定非空约束名(一般情况下不用):create table s_emp(id number constraint s_emp_id_nn not null,name varchar2(20));
表级实现:无表级实现


(4)检查约束(check)

特点:值需要满足某个条件
列级实现:
由系统提供检查约束名:create table s_emp(id number check(id>0),name varchar2(20));
指定检查约束名:create table s_emp(id number constraint s_emp_ck check(id>0),name varchar2(20));
表级实现:
一般形式:create table s_emp(id number,name varchar2(20), constraint s_emp_id_ck check(id>0));
无联合约束形式


(5)外键约束(foreign key references)

特点:一个表的字段值受限制于另一个表的字段值,主表(父表)为字段被引用的表,从表(子表)定义了外键的表
建立表的顺序:先建立父表,再建立子表
    建立父表(子表关联的父表字段必须有外键约束或者唯一性约束):create table parent(id number primary key,name varchar2(20));
    建立子表:
        列级实现:create table child(cid number constraint parent_id_child_cid_fk  references parent(id),cname varchar2(20));
        表级实现:create table child(cid number,cname varchar2(20),constraint parent_id_child_cid_fk foreign foreign key(cid) references parent(id));
插入数据:先插入父表数据,再插入子表数据,或者子表中外键约束的字段为NULL;
删除数据:必须先删除子表数据,后删除父表数据
删除表:必须先删除子表,才能删除父表


级联删除on delete cascade:删除父表数据行时,子表数据对应行自动被删除(或者删除父表时,自动删除子表)
建立父表:create table parent(id number primary key,name varchar2(20));
建立子表:
          列级实现设置级联删除:create table child(cid number constraint parent_id_chid_cid_fk references parent(id) on delete cascade,name varchar2(20));
          表级实现设置级联删除:create table child(cid number,name varchar2(20),constraint parnet_id_child_cid_fk foreign key cid references parent(id) on delete cascade);


级联置空on delete set null:删除父表数据行时,子表数据自动置NULL(或者删除父表时,自动将子表置NULL)
建立父表:create table parent(id number primary key,name varchar2(20));
建立子表:
        列级实现设置级联置空:create table child(cid number constraint parent_id_child_cid_fk references parent(id) on delete set null,name varchar2(20));
        表级实现设置级联置空:create table child(cid number,name varchar2(20),constraint parent_id_child_cid_fk foreign key(cid) references parent(id) on delete set null)
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值