前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Oracle应用实战四——约束+Scott表结构

Oracle应用实战四——约束+Scott表结构

作者头像
Java帮帮
发布2018-03-19 16:14:08
9880
发布2018-03-19 16:14:08
举报

约束

在数据库开发中,约束是必不可少,使用约束可以更好的保证数据的完整性。

1

主键约束(掌握)

主键约束都是在id上使用,而且本身已经默认了内容不能为空,可以在建表的时候指定。

创建一张表,把pid作为主键

create table person(

pid number(10) primary key,

name varchar2(10),

gender number(1) default 1,

birthday date

);

主键不可重复, SCOTT.SYS_C0017981是系统自动分配的约束的名字

主键不可为空

我们可以自己来指定主键约束的名字

create table person(

pid number(10),

name varchar2(10),

gender number(1) default 1,

birthday date,

constraint person_pk_pid primary key(pid)

);

2

非空约束

使用非空约束,可以使指定的字段不可以为空。

范例:建立一张pid和name不可以为空的表

create table person(

pid number(10) not null,

name varchar2(10) not null,

gender number(1) ,

birthday date,

);

3

唯一约束

表中的一个字段的内容是唯一的

范例:建表一个name是唯一的表

create table person(

pid number(10) ,

name varchar2(10) unique,

gender number(1) ,

birthday date

);

唯一约束的名字也可以自定义

create table person(

pid number(10) ,

name varchar2(10),

gender number(1) ,

birthday date,

constraint person_name_uk unique(name)

);

4

检查约束

使用检查约束可以来约束字段值的合法范围。

范例:创建一张表性别只能是1或2

create table person(

pid number(10) ,

name varchar2(10),

gender number(1) check(gender in (1, 2)),

birthday date

);

检查约束也可以自定义

create table person(

pid number(10) ,

name varchar2(10),

gender number(1),

birthday date,

constraint person_gender_ck check(gender in (1,2))

);

5

外键约束(掌握)

之前所讲的都是单表的约束,外键是两张表的约束,可以保证关联数据的完整性。

范例:创建两张表,一张订单表,一张是订单明细表,订单和明细是一对多的关系

订单表:

create table orders( order_id number(10) , total_price number(10,2), order_time date, constraint orders_order_id_pk primary key(order_id));

订单详情表:

create table order_detail( detail_id number(10) , order_id number(10), item_name varchar2(10), quantity number(10), constraint order_detail_detail_id_pk primary key(detail_id));

测试数据:

insert into orders values(1, 200, to_date('2015-12-12','yyyy-MM-dd'));insert into order_detail values(1, 2, 'java',1);

我们在两张表中插入如上两条数据,我们发现在order_detail表中插入的order_id在order表中并不存在,这样在数据库中就产生了脏数据。此时需要外键来约束它。

我们再次建表

create table orders( order_id number(10) , total_price number(10,2), order_time date, constraint orders_order_id_pk primary key(order_id));

create table order_detail( detail_id number(10) , order_id number(10), item_name varchar2(10), quantity number(10), constraint order_detail_detail_id_pk primary key(detail_id), constraint order_detail_order_id_fk foreign key(order_id) references orders(order_id));

外键关联一定注意:

外键一定是主表的主键

删表时一定先删子表再删主表,如果直接删主表会出现由于约束存在无法删除的问题

但是可以强制删除drop table orders cascade constraint;(不建议)

删除主表的数据可以先删除子表的关联数据,再删主表,也可以使用级联删除。

级联删除在外键约束上要加上on delete cascade 如

constraint order_detail_order_id_fk foreign key(order_id)

references orders(order_id) on delete cascade

这样删除主表数据的时候会把子表的关联数据一同删除

Scott用户下的表结构

6

Scott用户下的表结构

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2017-03-25,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 Java帮帮 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档