zoukankan      html  css  js  c++  java
  • mysql笔记(12)-外键约束的添加和删除

    本文将简单介绍外键的作用,添加/删除外键的方式,以及on update从句的使用

    一、外键的定义和作用

    1、定义

    若有关系表R和S,对于R中的属性A,A的任何值都来源于S中的属性B的值,且B具有UNIQUE约束,则A被称为R的外键

    2、作用

    (1) 能预防破坏表之间连接的行为
    (2) 能防止非法数据插入外键所在的列,因为它必须是它指向的那个表中的值之一

    二、添加外键约束

    1、在建表时添加
    create table table_name{
    xxx xxx xxx,
    xxx xxx xxx,
    xxx xxx xxx,
    FOREIGN KEY(column_name) references table_name(column_name);
    

    在建表语句的最后一句指明外键所在的列,并指明它指向哪个表的哪个属性

    2、表结构已存在时添加
    alter table table_name
    add FOREIGN KEY(column_name) 
    references table_name(clolumn name);
    

    三、删除外键约束

    需要先通过查看建表语句来获取外键约束的id

    show create table table_name G;
    

    例如 查看student表中外键dept_name的外键id
    12-1.png
    然后再使用 alter+drop 语句来删除外键

    alter table student
    drop FOREIGN KEY student_ibfk_1;
    

    四、on update 从句

    在添加外键约束时,可以在语句末尾添加 on update 从句
    从而指定 当被参照列的数据发生更新时 参照列所进行的动作
    跟在 on update 后的可选动作有4种:
    no action、cascade、set null、set default

    下面用具体的例子来说明:
    假设有关系表R和S,R中有外键A,参照S中的属性B
    (1) no action (不写on update从句时默认采用的动作)
    当B的某个值被更新时,检查表R的A列中是否有对应的值
    如果有,则发出报错,不允许被更新
    (2) cascade
    当B的某个值被更新时,检查表R的A列中是否有对应的值
    如果有,则同时更新A列中的那个值
    (3) set null
    当B的某个值被更新时,检查表R的A列中是否有对应的值
    如果有,则将A列中的对应值设为空
    (4) set default
    当B的某个值被跟新时,检查表R的A列中是否有对应的值
    如果有,则将A列中的对应值改为事先设定的默认值

  • 相关阅读:
    pycharm连接mysql报错!Server returns invalid timezone. Go to 'Advanced' tab and set 'serverTimezone' prope
    Django之视图
    Django模板语言相关内容
    Django使用ORM之多对多(四)
    Django使用ORM之一对多(三)
    018_序列化模块_什么是模块
    017_os_sys_time_collection_random 模块
    015_内置函数2
    014_内置函数
    013_生成器(yield)_列表推导式
  • 原文地址:https://www.cnblogs.com/baebae996/p/12943059.html
Copyright © 2011-2022 走看看