文章目录

  • 一、表的主键
  • 二、表的外键
    • 1、外键的概念
    • 2、外键的作用
    • 3、外键约束
    • 4、创建外键
    • 5、删除外键
    • 6、示例脚本
  • 三、版权声明

一、表的主键

在现实世界中,很多数据具有唯一的特性,例如身份证号码,在国家人口基本信息表中,一定不会存在多个人用同一个身份证号码的情况,再例如手机号码、QQ号码、银行帐号等等,还有学生管理系统,学生的年级、班级和学号三个字段组合起来是唯一的标识。

如果表中一个字段或多个字段组合起来的值是唯一的,就可以作为表的主键,在创建或修改表时用primay key关键字来指定主键。一个表只能有一个主键,而且组成主键的每个字段值都不能为空。

主键的作用:

1)体现数据结构设计的合理性。

2)提升数据操作的速度。

3)保证数据的完整性,在表中添加或修改记录时,数据库会检查该记录主键的值,不允许与其它记录主键的值重复,这种做法有个专业的名词:主键约束。

例如超女基本信息表,编号的字段名是id,在超女选秀活动中,每个超女的编号肯定是唯一的,不可能存在两个编号相同的超女,否则会引起混乱,我们可以把id字段设置为T_GIRL表的主键,后面的工作交给数据库,如果试图往表中插入多条id相同的记录,数据库将拒绝。

指定表的主建有两种方法。

1)在create table时指定。

create table T_GIRL
(id        char(4)         not null,   -- 编号name      varchar2(30)    not null,   -- 姓名yz        varchar2(20)        null,   -- 颜值sc        varchar2(20)        null,   -- 身材weight    number(4,1)     not null,   -- 体重height    number(3)       not null,   -- 身高birthday  date            not null,   -- 出生时间memo      varchar2(1000)      null,   -- 备注primary key(id)                       -- 指定id为表的主键
);

2)修改已经建好的表,增加主键约束。

alter table 表名 add constraint 主键名 primary key(字段名1,字段名2,......字段名n);

例如:

alter table T_GIRL add constraint PK_GIRL primary key(id);

在Oracle数据库中,虽然主键不是必需的,但是最好为每个表都设置一个主键,不管是单字段主键还是多字段主键(复合主键),它的存在代表了表结构的完整性,主键还可以用于其他表的外键关联,外键的知识下面再介绍。

二、表的外键

1、外键的概念

外键(foreign key)是用于表达两个表数据之间的关系,将表中主键字段添加到另一个表中,再创建两个表之间的约束关系,这些字段就成为第二个表的外键。

超女选秀活动有两个数据表:

1)赛区参数表

赛区代码,赛区名称,……。

2)超女基本信息表

赛区代码、超女编号、姓名、颜值、身材、身高、体重、……。

录入超女基本信息的时候要选择赛区,为了保证数据的有效,要求录入赛区代码时,必须保证赛区参数表中有这个赛区代码,否则数据是不一致的,为了保证数据的完整性,必须在程序中判断数据的合法性。针对这种情况,在表结构设计中采用外键来约束这两个表的赛区代码字段。

对赛区参数表来说,赛区代码是该表的主键。

对超女基本信息表来说,赛区代码是该表的外键。

赛区参数表也称为主表,超女基本信息表也称为从表

2、外键的作用

合理的数据结构设计,表中的数据一定有一致性约束,使用外键,让数据库去约束数据的一致,不给任何人出错的机会。不用外键会怎样?不用也不会怎么样,如果不用外键,在程序中要写代码进行判断,手工操作数据时也必须处处小心。

3、外键约束

1)当对从表进行操作时,数据库会:

a)向从表插入新记录时,如果外键值在主表中不存在,阻止插入。

b)修改从表的记录时,如果外键的值在主表中不存在,阻止修改。

2)当对主表进行修改操作时,数据库会:

a)主表修改主键值时,旧值在从表里存在便阻止修改。

3)当对主表进行删除操作时,数据库会(三选一):

a)主表删除行时,其主键值在从表里存在便阻止删除。

b)主表删除行时,连带从表的相关行一起删除。

c)主表删除行时,把从表相关行的外键字段置为null。

4、创建外键

创建外键的语法:

alter table 从表名add constraint 外键名 foreign key (从表字段列表)references 主表名 (主表字段列表)[on delete cascade|set null];

说明:

外键名,Oracle的标识符,建议采用FK_从表名_主表名的方式命名。

主表执行删除行时,其主键值在从表里存在便阻止删除,如果on delete cascade,连带从表的相关行一起删除;如果on delete set null,把从表相关行的外键字段置为null。

5、删除外键

alter table 从表名 drop constraint 外键名;

6、示例脚本

/* 创建赛区参数表。 */
create table T_AREACODE
(areaid   number(2)   not null,    -- 赛区代码,非空。areaname varchar(20) not null,    -- 赛区名称,非空。memo     varchar(300),            -- 备注primary key(areaid)               -- 创建主健。
);/* 创建超女基本信息表。 */
create table T_GIRL
(id        char(4)         not null,   -- 编号name      varchar2(30)        null,   -- 姓名areaid    number(2)           null,   -- 赛区代码yz        varchar2(20)        null,   -- 颜值sc        varchar2(20)        null,   -- 身材memo      varchar2(1000)      null,   -- 备注primary key(id)                       -- 创建主健。
);/* 以下三种创建外键的方式只能三选一  */
/* 为T_GIRL创建外键,无on delete选项。 */
alter table T_GIRLadd constraint FK_GIRL_AREACODE foreign key(areaid)references T_AREACODE(areaid);/* 为T_GIRL创建外键,采用on delete cascade选项。 */
alter table T_GIRLadd constraint FK_GIRL_AREACODE foreign key(areaid)references T_AREACODE(areaid)on delete cascade;/* 为T_GIRL创建外键,采用on delete set null选项。 */
alter table T_GIRLadd constraint FK_GIRL_AREACODE foreign key(areaid)references T_AREACODE(areaid)on delete set null;

三、版权声明

C语言技术网原创文章,转载请说明文章的来源、作者和原文的链接。
来源:C语言技术网(www.freecplus.net)
作者:码农有道

如果文章有错别字,或者内容有错误,或其他的建议和意见,请您留言指正,非常感谢!!!

Oracle的主键和外键相关推荐

  1. oracle 其他用户表主键,Oracle中查看所有的表,用户表,列名,主键,外键

    在Oracle中查看所有的表: select * from tab/dba_tables/dba_objects/cat; 看用户建立的表 : select table_name from user_ ...

  2. oracle查询一张表的主键,Oracle查询表主键、外键

    Oracle查询表主键.外键 1. 查找表的所有索引(包括索引名,类型,构成列) select t.*,i.index_type from user_ind_columns t,user_indexe ...

  3. 数据库元数据数据字典查询_5_列出给定表的主键、外键约束

    列出给定表的主键.外键约束 需求描述 需求:查询出给定的表emp的外键约束信息. 解决方法:通过各个数据库里提供的与外键约束相关的数据字典进行查询. 注: 数据库数据集SQL脚本详见如下链接地址 员工 ...

  4. 小知识系列:数据库的主键和外键

    文章目录 简介 创建主键 MySQL Oracle SQL Server 创建外键 mysql Oracle SQL Server 总结 简介 数据库是我们所有应用程序的基础,没有数据库的程序不是一个 ...

  5. mysql复合主键做外键,mysql – 使用复合主键作为外键

    如何将复合主键用作外键?看起来我的尝试不起作用. create table student ( student_id varchar (25) not null , student_name varc ...

  6. sql添加删除主键、外键

    在创建表时设立主键.外键 create table student(sid integer,sname nvarchar2(64),teacherId integer,primary key(sid) ...

  7. SQL的主键和外键约束

    SQL的主键和外键的作用: 外键取值规则:空值或参照的主键值. (1)插入非空值时,如果主键表中没有这个值,则不能插入. (2)更新时,不能改为主键表中没有的值. (3)删除主键表记录时,你可以在建外 ...

  8. mysql中主键外键的作用_数据库主键和外键的作用以及索引的作用,它的优缺点是什么?...

    定义主键和外键主要是为了维护关系数据库的完整性,总结一下: 1.主键是能确定一条记录的唯一标识,比如,一条记录包括身份正号,姓名,年龄. 身份证号是唯一能确定你这个人的,其他都可能有重复,所以,身份证 ...

  9. MySQL的几个概念:主键,外键,索引,唯一索引

    一.概念: 1.主键(primary key) 能够唯一标识表中某一行的属性或属性组.一个表只能有一个主键,但可以有多个候选索引.主键常常与外键构成参照完整性约束,防止出现数据不一致.主键可以保证记录 ...

最新文章

  1. MVC 中使用bootstrap-select 基础使用方法
  2. 实战SSM_O2O商铺_24【商铺列表】View层开发
  3. mysql 各种恢复_Mysql数据库备份和还原常用的命令
  4. java发送html模板
  5. 法院才是最童叟无欺的一元店
  6. 在vs2008工程中制作cab包
  7. Ubuntu 13.04 安装最新版本的Nginx
  8. java file的用法_Java 关于File使用
  9. tp5框架原理详解_工程测量教学合集,测量施工方案+原理解读,测量人员有它就够了...
  10. A* search算法解迷宫
  11. EF6.0新特性-DbCommandInterceptor实现非SQL端读写分离
  12. R绘图字体解决方案(转)
  13. 电信路由器怎么设置虚拟服务器,电信宽带怎么设置路由器?
  14. android 自动语音提醒,Android 语音播报实现方案
  15. matlab中ode45如何设置,如何使用Matlab中的ode45修正赋值错误(ode45函数的第488行)
  16. 飞塔60d带宽_飞塔防火墙划分带宽 万兆防火墙
  17. 网易云音乐的歌单推荐算法是怎样的?
  18. 贪心算法or背包问题
  19. 知乎Redis的演进之路:从单机到2000万QPS的挑战
  20. Python自学笔记10:实操案例七(根据星座测试性格特点、模拟12306火车订票下单)

热门文章

  1. 微课|玩转Python轻松过二级(1.6节):导入和使用标准库、扩展库对象
  2. 计算Fibonacci数列第n项的第8种方法(数学推导与Python实现)
  3. postman如何改成中文版_在 Windows 上如何用 Postman 重现 Dubbo 反序列化漏洞
  4. 数据结构 10分钟让你掌握经典排序(一)
  5. mysql客户端 mariadb_配置MariaDB允许客户端远程连接
  6. 力扣572. 另一棵树的子树(JavaScript)
  7. 力扣101. 对称二叉树(JavaScript)
  8. java迭代是引用_在迭代递归结构时无法获得可变引用:不能一次多次借用可变引用...
  9. 游戏脚本在移动游戏设计中的作用_游戏设计中道具设计分步解说
  10. 计算机音乐植物大战僵尸泳池,植物大战僵尸(泳池)