zoukankan      html  css  js  c++  java
  • 十、外键约束FK(foreign key)

    1.定义

    a.外键涉及到的术语:外键约束、外键字段、外键值。

    b.外键约束、外键字段、外键值三者之间的关系?

    答:给某个字段添加外键约束之后,该字段称为外键字段,外键字段中的值是外键值。

    c.外键根据个数分为:单一外键、复合外键

    1>【单一外键】:给一个字段添加外键约束

    2>【复合外键】:给多个字段联合添加一个外键

    d.在同一张表中可以有多个外键存在

    2.实例

    有两张表,分别是学生表 t_student 和班级表 t_class,以 t_student 表的 classno为外键

    drop table if exists t_student;
    create table t_student(
        sno int(4) primary key auto_increment,
        sname varchar(32),
        classno int(4),
        constraint t_student_classno_fk foreign key(classno) references t_class(cno)
    );
    
    create table t_class(
        cno int(4) primary key,
        cname varchar(32)
    );

    sql数据文本

    insert into t_class(cno,cname) values(100,'高三一班');
    insert into t_class(cno,cname) values(200,'高三二班');
    insert into t_class(cno,cname) values(300,'高三三班');
    insert into t_student(sname,classno) values('张三',100);
    insert into t_student(sname,classno) values('李四',100);
    insert into t_student(sname,classno) values('王五',400);
    View Code

     请注意以下三点:

    1.外键字段可以为null,外键为空的数据也叫孤儿数据;

    2.被引用的字段必须具有unique约束;(就是references后面的字段)

    3.加入外键约束后,表分为父表和子表,以上父表是 t_class;子表是 t_student;

    创建表时先创建父表,再删除子表;插入数据时,先插入父表数据,再插入子表数据。

    总结:在一对多的关系中,多的一方可以添加外键(子表),少的一方是引用(父表)。

    a.删除外键约束

    语法:alter table 表名 drop foreign key 外键约束名;

    3.级联更新和级联删除

    用法:在添加级联更新和级联删除的时候,需要在外键约束后面添加关键字;

    注意:级联更新和级联删除要谨慎使用,因为级联操作会将数据改变或者删除【数据无价】。

    a.级联删除:on delete cascade

    定义:在删除父表数据时,级联删除子表中的数据

    b.级联更新:on update cascade

    定义:在更新父表数据时,级联更新子表中的数据

  • 相关阅读:
    如何使用Tomcat
    Android推送通知指南(转)
    路由器
    供应链是什么意思
    c#打印(通过Word)
    RFID(电子标签、射频识别)技术在医疗行业中的应用
    无线数传DTU
    在C#中获取打印机的当前状态
    CCD是什么
    Failed to enable constraints. One or more rows contain values violating nonnull, unique, or foreignkey constraints.
  • 原文地址:https://www.cnblogs.com/zheaven/p/8184424.html
Copyright © 2011-2022 走看看