一、主键

在现实世界中,很多数据具有唯一的特性,例如身份证号码,在国家人口基本信息表中,一定不会存在多个人用同一个身份证号码的情况,再例如手机号码、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数据库中,虽然主键不是必需的,但是最好为每个表都设置一个主键,不管是单字段主键还是多字段主键(复合主键),它的存在代表了表结构的完整性,主键还可以用于其他表的外键关联,外键的知识下面再介绍。

二、外键

2.1、外键的概念

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

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

1)赛区参数表

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

2)超女基本信息表

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

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

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

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

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

2.2、外键的作用

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

2.3、外键约束

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

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

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

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

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

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

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

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

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

2.4、创建外键

语法:

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

说明:

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

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

2.5、删除外键

alter table 从表名 drop constraint 外键名;

2.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;

了解 Oracle 中的主键和外键相关推荐

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

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

  2. Oracle的主键和外键

    文章目录 一.表的主键 二.表的外键 1.外键的概念 2.外键的作用 3.外键约束 4.创建外键 5.删除外键 6.示例脚本 三.版权声明 一.表的主键 在现实世界中,很多数据具有唯一的特性,例如身份 ...

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

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

  4. 数据库中主键和外键的设计原则

    來源:http://www.cnblogs.com/deng02/archive/2009/02/26/1398462.html 主键和外键是把多个表组织为一个有效的关系数据库的粘合剂.主键和外键的设 ...

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

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

  6. 将一张表的主键作为外键关联到另一张表中

    将一张表的主键作为外键关联到另一张表中 1.外键的介绍 2.使用Navicat创建外键 3.外键的维护关系设定及其选择 1.外键的介绍 设置外键的作用很明显,就是讲两个表的数据产生关联,就比如个人信息 ...

  7. Mysql中主键和外键和索引

    Mysql中主键和外键和索引 1.主键和外键是什么 学生表(学号,姓名,性别,班级) 其中每个学生的学号是唯一的,学号就是一个主键 课程表(课程编号,课程名,学分) 其中课程编号是唯一的,课程编号就是 ...

  8. sql中的主键和外键

    主键 主键的定义 主键:表中经常有一个列或多列的组合,其值能唯一地标识表中的每一行.这样的一列或多列称为表的主键,通过它可强制表的实体完整性.当创建或更改表时可通过定义 PRIMARY KEY 约束来 ...

  9. mysql主键和外键示例_SQL数据库中主键和外键的应用实例

    数据库 什么是数据库主键(Primary Key)? 数据库主键(Primary Key):指的是一个列或多列的属性组合,其属性值能唯一标识一条记录,通过它可强制表的实体完整性. 例如: (tb_Bo ...

  10. mysql中什么是表?列?行?什么是主键和外键?什么是索引?为什么要使用索引?

    mysql中什么是表?列?行? 在关系数据库中,表(Table)是数据的主要组织单元.它是由一组命名的列和行组成,用于存储和组织数据. 列(Column)是表中的一个字段,用于存储特定类型的数据.每个 ...

最新文章

  1. html文件显示不了box,Workbox.js registerNavigationRoute找不到/加载html文件
  2. JavaScript权威指南科03章 种类、值和变量(1)
  3. idea社区版和企业版区别_IntelliJ IDEA 旗舰版与社区版有什么不同
  4. ASP.NET Core 沉思录 - ServiceProvider 的二度出生
  5. php redis 队列,Redis 实现队列
  6. Hexo+GitHub 快速搭建个人博客(三)---- 改变主题
  7. eclipse中修改项目文件夹目录显示结构
  8. go调用python脚本_谁能取代Python?我使用Go来部署机器学习模型的原因
  9. WPF MVVM框架 漂亮界面风格的WPF
  10. Java编译器和Java解释器---即时编译器和JAVA解释器
  11. 计算机动漫与游戏制作电脑配置,动漫与游戏设计该如何选电脑配置?
  12. WIN10_用户获取最高的管理员权限(关闭UAC控制)
  13. 容器三把斧之 | namespace原理与实现
  14. 基于web的小票打印
  15. 天津少儿编程培训,日本小学生正在把你甩在身后 ​
  16. kdd 2021 多网络挖掘的新前沿:近期发展和未来趋势
  17. 【附源码】计算机毕业设计SSM校园论坛设计
  18. jQuery随笔20190711~0713(选择器、事件、效果)
  19. ElasticSearch 使用 High Level REST Client 实现搜索等功能实战
  20. 客户关系管理咨询 - 获取最佳CRM解决方案

热门文章

  1. C 约瑟夫双向生死游戏
  2. 版本更新android联想,终于升级到Android10,联想ZUI11.5 内测版上线
  3. 网速3.5Gbps!小米AX6000路由器拆解评测
  4. 概述CSLA.NET 3.6 (Overview of CSLA .NET 3.6 for Windows and Silverlight)
  5. 2010年10月第1期(ACR2010专刊AS篇)_中信国健临床通讯目录
  6. 【面试】970- 一文帮你搞定90%的JS手写题
  7. 字节小游戏上线总结(1)
  8. unity3d笔记-击杀敌人显示不同的击杀图标
  9. 采用merge语句的非关联形式再次显神能
  10. MATLAB实现LFM信号的脉冲压缩及代码