外键 订阅
如果公共关键字在一个关系中是主关键字,那么这个公共关键字被称为另一个关系的外键。由此可见,外键表示了两个关系之间的相关联系。以另一个关系的外键作主关键字的表被称为主表,具有此外键的表被称为主表的从表。外键又称作外关键字。 展开全文
如果公共关键字在一个关系中是主关键字,那么这个公共关键字被称为另一个关系的外键。由此可见,外键表示了两个关系之间的相关联系。以另一个关系的外键作主关键字的表被称为主表,具有此外键的表被称为主表的从表。外键又称作外关键字。
信息
作    用
保持数据一致性,完整性
应用学科
数据库
别    名
外码、外关键字
中文名
外键
外文名
foreign key
外键定义
设F是基本关系R的一个或一组属性,但不是关系的键,Ks是基本关系S的主键。如果F与Ks相对应,则称F是R的外键,并称基本关系R为参照关系,基本关系S为被参照关系或目标关系。 换而言之,如果关系模式R中的某属性集不是R的主键,而是另一个关系R1的主键则该属性集是关系模式R的外键,通常在数据库设计中缩写为FK。在实际操作中,将一个表的值放入第二个表来表示关联,所使用的值是第一个表的主键值(在必要时可包括复合主键值)。此时,第二个表中保存这些值的属性称为外键(foreign key)。 [1]  显然目标关系的主码和参照关系的外码必须定义在一个或同一组的域上。关系R和S不一定是不同的关系,即外键不一定要与相应的主键同名。如在学生(学号,姓名,性别,专业号,年龄,班长)关系中,“学号”是主键,“班长”属性表示该学生所在班级的班长的学号,它引用了本关系中“学号”属性,因此“班长”是外键,这里学生关系既是参照关系也是被参照关系。不过在实际应用中为了便于识别,当主键与相应的外键属于不同关系时,往往取相同的名字。 [2] 
收起全文
精华内容
下载资源
问答
  • 外键

    千次阅读 2019-08-30 19:40:00
    数据库表创建好后,用命令行创建外键 弄清楚哪个表的列作为外键指向哪个表的主键 altertablearea_id修改表area_id add foreignkey (fuzeren_id)area_id的列名作为外键 referencesryb(ry_id)另外一个表的主键 ...

     

     

    数据库表创建好后,用命令行创建外键

    弄清楚哪个表的列作为外键指向哪个表的主键

    alter table area_id 修改表area_id

    add 

    foreign key (fuzeren_id) area_id的列名作为外键

    references ryb(ry_id) 另外一个表的主键

    可以多个表的主键作为外键指向另外一个表的主键

    展开全文
  • 外键外键约束理解

    万次阅读 多人点赞 2018-08-20 20:11:27
    数据库(外键及其约束理解) 一:首先是外键的定义  如果一个字段X在一张表(表一)中是主关键字,而在另外一张表(表二)中不是主关键字,则字段X称为表二的外键;换句话说如果关系模式R1中的某属性集不是自己的...

    转自:https://www.cnblogs.com/chenxiaohei/p/6909318.html

    数据库(外键及其约束理解)

    一:首先是外键的定义

           如果一个字段X在一张表(表一)中是主关键字,而在另外一张表(表二)中不是主关键字,则字段X称为表二的外键;换句话说如果关系模式R1中的某属性集不是自己的主键,而是关系模式R2的主键,则该属性集称为是关系模式R1的外键。

    二:主键表和外键表的理解

    (1)以公共关键字作主键的表为主键表(父表,主表)

    (2)以公共关键字作外键的表为外键表(从表,外表)

     

    举个例子:

    这里有2张表(student和depart)学生表和院系表,这里的字段departNum就是学生表的外键,这里的外键表是学生表,主键表是院系表。

     

    四:外键的作用

    各种书籍和网上的资料大多都是抽象空洞的解释:保证数据的完整性和一致性。

    个人对此的理解与接下来的外键约束一起讲。

    五:外键约束

    Mysql 下,外键设置:

    on delete  规则:

    1、CASCADE:级联

       (1)所谓的级联删除,就是删除主键表的同时,外键表同时删除。

       (2)以上面的例子将就是,假如院系表中的某个院系被删除了,那么在学生表中要想查询这个被删除的院系号所对应的院信息就会报错,因为已经不存在这个系了,所以,删除院系表(主键表)时必须删除其他与之关联的表,这里就说明了外键的作用,保持数据的一致性、完整性。当然反过来讲,你删除学生表中的记录,并不影响院系表中的数据,你查询院系号也能正确查询。所以删除外键表中的数据并不影响主键表。


    2、NO ACTION(非活动,默认)、RESTRICT:约束/限制
      当取值为No Action或者Restrict时,则当在主键表中删除对应记录时,首先检查该记录是否有对应外键,如果有则不允许删除。(即外键表约束主键表)
    3、SET NULL
        当取值为Set Null时,则当在主键表中删除对应记录时,首先检查该记录是否有对应外键,如果有则设置子表中该外键值为null(,一样是外键表约束主键表,不过这就要求该外键允许取null)。

    NO ACTION和RESTRICT的区别:只有在及个别的情况下会导致区别,前者是在其他约束的动作之后执行,后者具有最高的优先权执行。

    六.实际应用

    对象模型中的数据如下:

    package org.model;  
     
    public class Student {  
    private String stuNum;  
    private String stuName;  
    <span style="color:#FF0000;">private Depart depart;</span>  
    public String getStuNum() {  
        return stuNum;  
    }  
    public String getStuName() {  
        return stuName;  
    }  
    public Depart getDepart() {  
        return depart;  
    }  
    public void setStuNum(String stuNum) {  
        this.stuNum = stuNum;  
    }  
    public void setStuName(String stuName) {  
        this.stuName = stuName;  
    }  
    public void setDepart(Depart depart) {  
        this.depart = depart;  
    }  
     
    }

     

    这里设计对象模型时的属性并不是设计成departNum这个外键,而是整个Depart对象,这样做的好处是在查询时,就不用通过外键或者连接查询再多查询一次

     

    若要通过外键查询:

    <span style="font-size:18px;"> Query query=session.createQuery("from Student as stud where <span style="color:#FF0000;">stud.depart.departNum=:num</span>");  
     query.setString("num","890");</span>  

     

    展开全文
  • 外键外键(foreign key) 外键为某个表中的一列,它包含另一个表的主键值,定义了两个表之间的关系什么是外键约束右边的DepartmentID是外键外键约束是指用于在两个表之间建立关系,需要指定引用主表的哪一列。On ...

    主外键和外键约束

    主键

    主键(primary key):一列(或一组列),其值能够唯一区分表中每个行 。

    外键

    外键(foreign key) 外键为某个表中的一列,它包含另一个表的主键值,定义了两个表之间的关系

    什么是外键约束

    右边的DepartmentID是外键。 外键约束是指用于在两个表之间建立关系,需要指定引用主表的哪一列。

    On Delete

    On Delete可能取值如上图为:No Action, Cascade,Set Null, Restrict属性。 1. No Action / Restrict 当取值为No Action或者Restrict时,则当在父表(主表)(即外键的来源表)中删除对应记录时,首先检查该记录对应的从表是否有对应外键,如果有则不允许删除。 2. Cascade(级联) 当取值为Cascade时,则当在父表(主表)(即外键的来源表)中删除对应记录时,首先检查该记录是否有对应外键,如果有则也删除外键在子表(即包含外键的表)中的记录。(一起删除) 3. Set Null 当取值为Set Null时,则当在父表(即外键的来源表)中删除对应记录时,首先检查该记录是否有对应外键,如果有则设置子表中该外键值为null(不过这就要求该外键允许取null)。

    On Update

    On Update可能取值如上图为:No Action, Cascade,Set Null, Restrict属性。(更新的是外键的值)No Action / Restrict 当取值为No Action或者Restrict时,则当在父表(即外键的来源表)中更新对应记录时,首先检查该记录是否有对应外键,如果有则不允许更新。

    Cascade(级联) 当取值为Cascade时,则当在父表(即外键的来源表)中更新对应记录时,首先检查该记录是否有对应外键,如果有则也更新外键在子表(即包含外键的表)中的记录。

    Set Null 当取值为Set Null时,则当在父表(即外键的来源表)中更新对应记录时,首先检查该记录是否有对应外键,如果有则设置子表中该外键值为null(不过这就要求该外键允许取null)。

    理解示例

    表结构

    学生表(学号,姓名,性别,班级) // 学号唯一,能确定学生表的一行课程表(课程编号,课程名,学分) // 课程编号唯一,能确定课程表的一行成绩表(学号,课程号,成绩) // 学号和课程号才能唯一确定哪个人哪门课得了多少分,学号和课程号这两列为主键

    具体分析

    以上面的成绩表为例,学号和课程号是成绩表的主键,那么学号是成绩表的外键还是学生表的外键?当然是成绩表的外键,因为学号是学生表的主键呀,怎么可能是外键?同理成绩表课程号也应该是成绩表的外键。 其实,外键主要建立与其他表的联系,如果我们想知道成绩表中某一行成绩是谁考的,啥性别,在哪个班级,就可通过成绩表的外键学号与学生表建立一种关系。

    展开全文
  • mysql建立外键

    2021-01-20 00:11:20
    建立外键的前提:本表的列必须与外键类型相同(外键必须是外表主键)。 外键作用: 使两张表形成关联,外键只能引用外表中的列的值! 指定主键关键字: foreign key(列名) 引用外键关键字: references <外键...
  • 查看外键名称查看数据库外键名字

    千次阅读 2019-10-29 12:46:35
    我们要进行删除外键时,需要知道外键的名字,那么如何查看数据库外键呢?有2种方式查看: 1.过查看表的方式查看外键名字; 2.通过mysql自带的系统表查看外键。 更多精彩请访问本文源地址: ...

    我们要进行删除外键时,需要知道外键的名字,那么如何查看数据库外键呢?有2种方式查看: 1.过查看表的方式查看外键名字; 2.通过mysql自带的系统表查看外键。
    更多精彩请访问本文源地址: https://blog.csdn.net/zixiao217

    先来看一下创建外键的方式:

    创建外键的方式

    更多精彩请访问本文源地址: https://blog.csdn.net/zixiao217

    方式一: 在创建表的时候同时指定外键名字

    create database fundb;
    USE fundb;
    -- 创建用户表
    CREATE TABLE `t_user` (
      `uid` int(11) PRIMARY KEY AUTO_INCREMENT,
      `uname` varchar(40) DEFAULT NULL,
      `age` int(11) DEFAULT NULL
    ) ;
    -- 创建数学成绩表
    CREATE TABLE `t_score_math` (
      `uid` int(40) DEFAULT NULL,
      `score` double DEFAULT NULL,
      CONSTRAINT `f_uk` FOREIGN KEY (`uid`) REFERENCES `t_user` (`uid`)
    ) ;
    
    

    方式二:在建表后,对表修改进行添加外键

    create database fundb;
    USE fundb;
    -- 创建用户表
    CREATE TABLE `t_user` (
      `uid` int(11) PRIMARY KEY AUTO_INCREMENT,
      `uname` varchar(40) DEFAULT NULL,
      `age` int(11) DEFAULT NULL
    ) ;
    -- 创建数学成绩表
    CREATE TABLE `t_score_math` (
      `uid` int(40) DEFAULT NULL,
      `score` double DEFAULT NULL
    ) ;
    
    
    -- 对表添加外键  指定外键名字: f_mykey
    alter table t_score_math add 
    constraint f_mykey   -- 该行省略的话,则会自动添加一个名字
    foreign key (uid) references t_user(uid);
    

    查看外键名字的方式

    方式一:通过查看表的方式查看外键名字

    SHOW CREATE TABLE `t_score_math`;
    

    得到以下结果:

    Table Create Table
    t_score_math 建表语句

    建表语句内容如下:

    CREATE TABLE `t_score_math` (
      `uid` int(40) DEFAULT NULL,
      `score` double DEFAULT NULL,
      KEY `f_mykey` (`uid`),
      CONSTRAINT `f_mykey` FOREIGN KEY (`uid`) REFERENCES `t_user` (`uid`)
    ) ENGINE=InnoDB DEFAULT CHARSET=utf8
    

    可以得到外键的名字: f_mykey;

    方式二:通过mysql自带的系统表查看外键

    SELECT * FROM INFORMATION_SCHEMA.KEY_COLUMN_USAGE  WHERE constraint_schema = 'fundb'  AND table_name = 't_score_math';
    

    结果如下,也可以查看到外键的名字:

    在这里插入图片描述

    展开全文
  • SQL Server 2012 外键约束(定义外键、删除外键

    万次阅读 多人点赞 2019-04-21 20:00:26
    文章目录准备知识定义外键使用SSMS工具定义外键使用SQL方式定义外键删除外键使用SSMS工具删除外键方式一:在对象资源管理器中删除主键方式二:在表设计器中删除主键使用SQL方式删除外键 准备知识     外键...
  • mysql外键外键约束

    2020-03-28 23:20:34
    一. 基本知识 1.MySQL中“键”和“索引”的定义相同,所以外键和主键一样也是索引的一种。不同的是MySQL会自动为所有表的主键进行...外键是用来实现参照完整性的,不同的外键约束方式将可以使两张表紧密的结合起来...
  • 外键外键(foreign key) 外键为某个表中的一列,它包含另一个表的主键值,定义了两个表之间的关系 什么是外键约束 右边的DepartmentID是外键外键约束是指用于在两个表之间建立关系,需要指定引用主表的哪一列。...
  • 使用Django REST Framework虽然开发接口快速,但是如果想要获取到除外键id值之外的外键信息,直接继承serializers.ModelSerializer类,然后在fields中指定返回的字段是获取不到外键的其他值的,比如我现在需要外键的...
  • 外键约束

    2021-01-05 22:33:40
    外键约束 在新表中添加外键约束语法: constraint 外键约束名称 foreign key(外键的字段名称) references 主表表名(主键字段名) 在已有表中添加外键约束:alter table 从表表名 add constraints 外键约束名称 ...
  • 物理外键性能问题 物理外键性能问题总结: ​ 1.数据库需要维护外键的内部管理 ​ 2.外键等于把数据的一致性实物实现,全部交给数据库的服务器完成 ​ 3.有了外键,当做一些设计外键字段的增、删、更新操作之后,...
  • 在晚上看到的一网友的评论,引起我的共鸣,一直以来的想法不知如何表述、也不知对不对。于是,[ 逻辑外键代替物理外键 ]便是我想表达的意思。
  • 外键约束 -- 创建db2数据库 CREATE DATABASE db2; -- 使用db2数据库 USE db2; /* 外键约束 标准语法: CONSTRAINT 外键名 FOREIGN KEY (本表外键列名) REFERENCES 主表名(主表主键列名) */ -- 建表时添加外键...
  • 在MySQL中,InnoDB引擎类型的表支持了外键约束。外键的使用条件:1.两个表必须是InnoDB表,MyISAM表暂时不支持外键(据说以后的版本有可能支持,但至少目前不支持);2.外键列必须建立了索引,MySQL 4.1.2以后的版本...
  • 外键问题

    2021-01-05 13:47:17
    为什么大多数项目的数据库都取消外键了(外键取消原因) 弹指间bug灰飞烟灭 2020-05-26 14:03:02 458 收藏 1 分类专栏: 数据库 文章标签: 数据库 版权 数据库外键 如果一个字段a在一张表(表一)中是主关键字,而...
  • MySQL进阶(一)主外键讲解

    万次阅读 多人点赞 2015-05-14 15:55:48
    1、什么是外键: 主键:是唯一标识一条记录,不能有重复的,不允许为空,用来保证数据完整性 外键:是另一表的主键,外键可以有重复的,可以是空值,用来和其他表建立联系用的。所以说,如果谈到了外键,一定是至少...
  • MySql外键

    2019-12-08 13:56:04
    mysql外键的初步认识,如何创建外键
  • mysql删除外键约束

    万次阅读 多人点赞 2018-01-20 08:11:10
    1.查看数据库表创建的sql语句 ...2.查看外键的约束名 CREATE TABLE `vip` ( `id` int(11) NOT NULL AUTO_INCREMENT, `address` varchar(255) DEFAULT NULL, `code` varchar(255) DEFAULT NULL,
  • MySQL外键

    2019-07-20 08:47:15
    数据库表的外键约束 外键约束要有两张表 其中一张是主键表,另外一张是外键表 关系就是一对多, 主键是不允许重复(主键表) 外键是可以重复的 ( 外键表) 班级表(主键表)和学生表(外键表) (1)先创建主键表,再...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 50,163
精华内容 20,065
关键字:

外键