如果一个实体的某个字段指向另一个实体的主键,就称为外键
被指向的实体,称之为主实体(主表),也叫父实体(父表)。
负责指向的实体,称之为从实体(从表),也叫子实体(子表)

作用:
用于约束处于关系内的实体
增加子表记录时,是否有与之对应的父表记录

如果主表没有相关的记录,从表不能插入

先插入主表数据后再插入从表数据:

在删除或者更新主表记录时,从表应该如何处理相关的记录

设置级联操作:
在主表数据发生改变时,与之关联的从表数据应该如何处理
    使用关键字:
     on update
     on delete
    来标识
允许的级联动作:
cascade关联操作,如果主表被更新或删除,从表也会执行相应的操作
set null,表示从表数据不指向主表任何记录
restrict:拒绝主表的相关操作

alter table t_student add foreign key (class_id) references t_class (class_id)
on delete set null; # 在删除外键时,将从表的外键值设置为null

修改外键:
先删除这个表的外键,然后再增加
alter table tb_name drop froeign key 外键名称
外键名称在建立外键时可以自定义名称,如果不自定义,会按照mysql自动生成一个名称
show create table tb_name;
 

alter table t_student drop foreign key t_student_ibfk_1;

删除外键后不会对表中的数据造成任何影响,改变的只是对表的一种约束

alter table t_student add foreign key (class_id) references t_class (class_id)
on delete set null; # 在删除外键时,将从表的外键值设置为null

注:on delete 与on update 可以同时出现,
 但在on delete 或on update 后不能同时出现cascade、set null、restrict,只能有一个
关于restrict的外键约束此处没有写,与其他两个一样
 restrict:拒绝主表的相关操作,在主表更新或者删除数据时,在从表中存在与主表主键相关的数据,则不允许对主表数据进行更新或者删除

在不设置任何级联关系约束时,主表默认会是restrict

在restrict约束下,如果想要删除主表数据,除了可以删除没有与子表数据相关的数据外,
可以先修改子表中的外键(修改时,外键必须也要关联到主表的主键,否则不能修改成功)
 

也可以先删除与想要删除的主表数据的子表数据,再去删除此条主表数据

mysql--外键(froeign key)的更多相关文章

  1. MYSQL外键(Foreign Key)的使用

    在MySQL 3.23.44版本后,InnoDB引擎类型的表支持了外键约束.外键的使用条件:1.两个表必须是InnoDB表,MyISAM表暂时不支持外键(据说以后的版本有可能支持,但至少目前不支持): ...

  2. mysql 约束条件 外键 forigen key 介绍

    外键 forigen key作用 :建立表之间的关系 什么是外键 员工信息表有这些字段:id号  姓名 性别 员工所在部门名 部门描述信息 公司有3个部门,但是有1个亿的员工,那意味着 员工所对应的部 ...

  3. mysql 外键约束备注

    梳理mysql外键约束的知识点. 1.mysql外键约束只对InnoDb引擎有效: 2.创建外键约束如下: DROP TABLE IF EXISTS t_demo_product; CREATE TA ...

  4. MySQL外键之级联

    简介 MySQL外键起到约束作用,在数据库层面保证数据的完整性.例如使用外键的CASCADE类型,当子表(例如user_info)关联父表(例如user)时,父表更新或删除时,子表会更新或删除记录,这 ...

  5. MySQL外键约束On Delete、On Update各取值的含义

    主键.外键和索引的区别?   主键 外键 索引 定义: 唯一标识一条记录,不能有重复的,不允许为空 表的外键是另一表的主键, 外键可以有重复的, 可以是空值 主索引(由关键字PRIMARY定义的索引) ...

  6. Mysql 外键设置

    MySql外键设置详解 (1) 外键的使用: 外键的作用,主要有两个:    一个是让数据库自己通过外键来保证数据的完整性和一致性    一个就是能够增加ER图的可读性    有些人认为外键的建立会给 ...

  7. MySQL外键的作用和创建

    MySQL外键的作用: 保持数据一致性,完整性,主要目的是控制存储在外键表中的数据.使两张表形成关联,外键只能引用外表中列的值! 我们来建两个表 CREATE TABLE `example1` ( ` ...

  8. 数据库六大约束用法:主键(primary key)、外键(foreign key)、非空(not null)、默认(default)、检查(check)、唯一(unique)

    1. 数据库有六大约束 主键(primary key) 外键(foreign key):被参照的键必须有唯一约束或是主键 非空(not null) 默认(default) 检查(check):orac ...

  9. Mysql外键的使用

    MySQL外键(请确保数据库是innodb类型)网上有很多介绍的文章,这里我就凭自己的理解再次整理了下,废话不多说,直入正题哈.外键的作用: 保持数据一致性,完整性,主要目的是控制存储在外键表中的数据 ...

  10. mysql 外键和子查询,视图

    1.mysql 外键约束 建表时生成外键   foreing key ('sid') references' student'('id'); 建表后添加外键  alter table' course ...

随机推荐

  1. 关于Console的Main(String[] args)参数输入

    之前接触一个往Console里输入参数的项目,资深QA教我怎么run,灰常脸红. 今日无事,baidu之. Step1 写简单Console Code. class Program { static ...

  2. vba考勤处理

    sheet1 格式 Sub 统计人数() 'A为号码C姓名 D时间 Dim j As Integer j = 1 For i = 2 To 100000 Step 1 If Range("a ...

  3. checklistbox的使用

    public class CheckListboxHelper { #region 为checklistbox绑定数据源 /// <summary> /// 为checklistbox绑定 ...

  4. 经典 SQL

    经典sql   总结一些经常用到或碰到的SQL语句,希望能与大家分享,同时也希望大家能提供更多的精妙SQL语句..... 1.delete table1 from (select * from tab ...

  5. iOS中有关配置 Apache 服务器的详细步骤

    配置 Apache 服务器 目的: 能够有一个测试的服务器,Apache 服务器是免费的! 为什么是 Apache 使用最广的 Web 服务器 Mac自带,只需要修改几个配置就可以,简单,快捷 有些特 ...

  6. STL_函数模板

    #include <iostream>#include <string>using namespace std; #define MAX(T) \ T max_##T (T x ...

  7. file_get_contents()的另一种使用方法

    今天在网上看到一篇挺不错的文章,拿过来保存学习一下.本文源地址为:http://www.kuitao8.com/20140727/2867.shtml $data = file_get_content ...

  8. VB中后台打开Excel文件实现代码

    某些时候需要打开Excel文件来获取或者写入数据,但又不希望跳出打开的Excel文件窗口,可以用下面的代码: Dim eb As New excel.Application, wb as excel. ...

  9. linux----ln

    1.格式 ln source_file_path target_file_path 2.执行ln 命令的用户要对source_file_path有写权限,才可以创建软连接. 3.souce_file这 ...

  10. 博士论文》》》 Journal,magazine,transaction,proceeding

    Journal期刊:刊登关于某特殊主题的文章的期刊 magazine杂志:综合性内容的期刊 transactions(学会等的)议事录,会报,会刊 proceedings记录, 会议录; 年[学]报; ...