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

约束

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

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用户下的表结构

原文发布于微信公众号 - Java帮帮(javahelp)

原文发表时间:2017-03-25

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏Django Scrapy

mysql相关命令

安装 在ubuntu 14.04 x64下 1 安装 # 安装服务端 (需要中途设置root密码) sudo apt-get install mysql-ser...

34170
来自专栏乐沙弥的世界

导出MySQL用户权限

    在对MySQL数据库进行迁移的时候,有时候也需要迁移源数据库内的用户与权限。对于这个迁移我们可以从mysql.user表来获取用户的相关权限来生成相应的...

20330
来自专栏Java学习123

Linux各类压宿包的解压方法

29990
来自专栏magicsoar

Mysql Innodb 锁机制 select * from table where?insert?delete?update?3个insert的死锁2个update的死锁3个以上delete的死

latch与lock latch 可以认为是应用程序中的锁,可以称为闩锁(轻量级的锁) 因为其要求锁定的时间必须要非常短,若持续时间长,则会导致应用性能非常差,...

35780
来自专栏Albert陈凯

SQL语句各个部分执行顺序

http://www.tuicool.com/articles/fERNv2 下面先给出上面的SQL语句的执行顺序,然后进行讲解: (8)  select (...

35670
来自专栏个人随笔

MySQL 视图

数据库视图是虚拟表或逻辑表,它被定义为具有连接的SQL SELECT查询语句。 因为数据库视图与数据库表类似,它由行和列组成,因此可以根据数据库表查询数据。 大...

379110
来自专栏Greenplum

Greenplum使用pg_dump备份数据库

Greenplum 支持逻辑备份。我们使用Greenplum自带的pg_dump命令实现逻辑备份功能,导出备份文件,再通过 psql 导入到Greenplum中...

30240
来自专栏数据和云

INTERVAL分区升级了,你知道吗?!

辑手记: Oracle 11g新增的INTERVAL分区使得手工给RANGE分区添加新分区的工作变得异常简单,这也使得INTERVAL分区成为RANGE分区的最...

33950
来自专栏PhpZendo

MySQL创建用户与授权

假如你在给用户'pig'@'%'授权的时候是这样的(或类似的):GRANT SELECT ON test.user TO 'pig'@'%',则在使用REVOK...

61710
来自专栏维C果糖

史上最简单的 MySQL 教程(二十九)「外键(下)」

外键:foreign key,外面的键,即不在自己表中的键。如果一张表中有一个非主键的字段指向另外一张表的主键,那么将该字段称之为外键。每张表中,可以有多个外键...

45140

扫码关注云+社区

领取腾讯云代金券