0
点赞
收藏
分享

微信扫一扫

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

兽怪海北 2022-04-02 阅读 92


约束

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

1主键约束(掌握)

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

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

create table person(

       pid      number(10) primary key,

       name     varchar2(10),

       gender   number(1)  default 1,

       birthday date

);

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

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

主键不可为空

Oracle应用实战四——约束+Scott表结构_主键_02

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

create table person(

       pid      number(10),

       name     varchar2(10),

       gender   number(1)  default 1,

       birthday date,

       constraint person_pk_pid primary key(pid)

);

Oracle应用实战四——约束+Scott表结构_字段_03

2非空约束

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

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

create table person(

       pid      number(10) not null,

       name     varchar2(10) not null,

       gender   number(1)  ,

       birthday date,

);

Oracle应用实战四——约束+Scott表结构_数据_04

3唯一约束

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

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

create table person(

       pid      number(10) ,

       name     varchar2(10) unique,

       gender   number(1)  ,

       birthday date

);

Oracle应用实战四——约束+Scott表结构_主键_05

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

create table person(

       pid      number(10) ,

       name     varchar2(10),

       gender   number(1)  ,

       birthday date,

       constraint person_name_uk unique(name)

);

Oracle应用实战四——约束+Scott表结构_字段_06

4检查约束

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

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

create table person(

       pid      number(10) ,

       name     varchar2(10),

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

       birthday date

);

Oracle应用实战四——约束+Scott表结构_数据_07

检查约束也可以自定义

create table person(

       pid      number(10) ,

       name     varchar2(10),

       gender   number(1),

       birthday date,

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

);

Oracle应用实战四——约束+Scott表结构_数据_08

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)

);




Oracle应用实战四——约束+Scott表结构_主键_09

外键关联一定注意:

外键一定是主表的主键

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

Oracle应用实战四——约束+Scott表结构_主键_10

但是可以强制删除​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

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

Oracle应用实战四——约束+Scott表结构_字段_11



Scott用户下的表结构

6Scott用户下的表结构

Oracle应用实战四——约束+Scott表结构_字段_12

Oracle应用实战四——约束+Scott表结构_主键_13

Oracle应用实战四——约束+Scott表结构_字段_14

Oracle应用实战四——约束+Scott表结构_主键_15

Oracle应用实战四——约束+Scott表结构_数据_16

7下期预告Oracle(sql)


Oracle应用实战四——约束+Scott表结构_数据_17

​ 长按关注,有好礼相送 ​


举报

相关推荐

0 条评论