MySQL外键的作用:

保持数据一致性,完整性,主要目的是控制存储在外键表中的数据。使两张表形成关联,外键只能引用外表中列的值!

我们来建两个表

CREATE TABLE `example1` (

`stu_id` int(11) NOT NULL DEFAULT '0',

`course_id` int(11) NOT NULL DEFAULT '0',

`grade` float DEFAULT NULL,

PRIMARY KEY (`stu_id`,`course_id`)

);

CREATE TABLE `example2` (

`id` int(11) NOT NULL,

`stu_id` int(11) DEFAULT NULL,

`course_id` int(11) DEFAULT NULL,

PRIMARY KEY (`id`),

KEY `f_ck` (`stu_id`,`course_id`),

CONSTRAINT `f_ck` FOREIGN KEY (`stu_id`, `course_id`) REFERENCES `example1` (`stu_id`, `course_id`)

);

insert into example1 (stu_id,course_id,grade)values(1,1,98.5),(2,2,89);

insert into example2 (id,stu_id,course_id)values(1,1,1),(2,2,2);

我们建了

example1表,里面包含stu_id学号,course_id课程号,grade分数

example2表,里面包含id,stu_id学号,course_id课程号,然后建立外键

分别插入数据到两个表中。

我们把example2中的stu_id和course_id称为example2表的外键,example1是父表,example2是字表,两个表形成关联,必须字表的数据删除后,才能删除父表中的对应数据

现在我们来删除example1中的一条数据

delete from example1 where stu_id=2;

会发现报错

ERROR 1451 (23000): Cannot delete or update a parent row: a foreign key constraint fails (`test`.`example3`, CONSTRAINT `f_ck` FOREIGN KEY (`stu_id`, `course_id`) REFERENCES `example2` (`stu_id`, `course_id`))

因为example2中的数据关联了example1的数据,这样是删不了的,达到了外键的作用;

然后我们来先删除example2表中的数据,再删除example1表中的数据

delete from example2 where stu_id=2;

delete from example1 where stu_id=2;

这样就成功了;

事件触发限制:

on delete和on update , 可设参数cascade(跟随外键改动), restrict(限制外表中的外键改动),set Null(设空值),set Default(设默认值),[默认]no action

我们来看看事件触发限制是干嘛的。。。

我们先删除外键,然后重新建立外键带上事件触发限制

alter table example2 drop foreign key f_ck;

alter table example2 add CONSTRAINT `f_ck` FOREIGN KEY (`stu_id`, `course_id`) REFERENCES `example1` (`stu_id`, `course_id`) ON DELETE CASCADE ON UPDATE CASCADE;

我们先查看一下数据

mysql> select * from example1;select * from example2;

+--------+-----------+-------+

| stu_id | course_id | grade |

+--------+-----------+-------+

|      1 |        1 |  98.5 |

+--------+-----------+-------+

1 row in set (0.00 sec)

+----+--------+-----------+

| id | stu_id | course_id |

+----+--------+-----------+

|  1 |      1 |        1 |

+----+--------+-----------+

1 row in set (0.00 sec)

这时example1和example2中的stu_id和course_id都是1,

再来修改example1表中的数据看看

update example1 set stu_id=3,course_id=3 where stu_id=1;

再来查看数据

mysql> select * from example1;select * from example2;

+--------+-----------+-------+

| stu_id | course_id | grade |

+--------+-----------+-------+

|      3 |        3 |  98.5 |

+--------+-----------+-------+

1 row in set (0.00 sec)

+----+--------+-----------+

| id | stu_id | course_id |

+----+--------+-----------+

|  1 |      3 |        3 |

+----+--------+-----------+

1 row in set (0.00 sec)

发现没,example1和example2中的stu_id和course_id都变成了3

我们在来删除example1表中的数据

delete from example1 where stu_id=3;

会发现可以删除,而且example2中的数据也没有了;

其实啊,外键就这个作用,保持数据一致性,完整性,是不让改还是一起改,由事件触发器决定;

数据库技术mysql能干什么_MySQL外键有什么作用相关推荐

  1. mysql中外键的作用是什么_mysql外键基本功能与用法详解

    本文实例讲述了mysql外键基本功能与用法.分享给大家供大家参考,具体如下: 本文内容: 什么是外键 外键的增加 外键的修改和删除 外键的约束模式 首发日期:2018-04-12 什么是外键: 外键就 ...

  2. mysql cluster 外键_Mysql外键约束

    Mysql集群创建外键,分为四种约束:no action,restrict,cascade,set null.如果表A的主关键字是表B中的字段,则该字段称为B的外键,表A称为主表,表B称为从表.外键是 ...

  3. mysql engine 外键_Mysql 外键设置

    (1) 外键的使用: 外键的作用,主要有两个: 一个是让数据库自己通过外键来保证数据的完整性和一致性 一个就是能够增加ER图的可读性 有些人认为外键的建立会给开发时操作数据库带来很大的麻烦.因为数据库 ...

  4. mysql基本语法 外键_mysql外键基本功能与用法详解

    本文实例讲述了Mysql外键基本功能与用法.分享给大家供大家参考,具体如下: 本文内容: 什么是外键 外键的增加 外键的修改和删除 外键的约束模式 首发日期:2018-04-12 什么是外键: 外键就 ...

  5. mysql给表加外键约束_MySQL为表添加外键约束

    为表添加外键约束的语法 Alter table 表名 add constraint FK_ID foreign key(外键字段名) REFERENCES 外表表名(主键字段名): 为表student ...

  6. mysql外键约束使用场景_MySQL外键约束的使用

    软件工程试验二中要求建立如下数据库: 使用MySQL建立一个"图书数据库" BookDB,包含两张表: – Book {ISBN (PK), Title, AuthorID (FK ...

  7. mysql中外键总结_mysql外键的一些总结

    外键作用:①可以让数据表不至于太过冗余: ②可以保持数据的一致性(当主表不存在对于的外键时,从表进行的增删操作无效): ③让数据库自动控制插入数据的合法性 外键规则:① 主键和外键数据类型需系统并且为 ...

  8. mysql是否需要设置外键_数据库到底需不需要设置外键?

    在大型系统中(性能要求不高,安全要求高),最好使用外键(外键可以增强数据库数据的完整性和一致性) 在大型系统中(性能要求高,安全自己控制),不用外键(有外键约束的话,插入字段会进行检查,影响效率) 小 ...

  9. mysql外键名_MySQL外键(foreign key)使用及说明详解

    外键也称之为外键约束: foreign key 外键: 外面的键, 一张表的一个字段(非主键)指向另外一个表的主键, 那么该字段就称之为外键. 外键所在的表称之为子表(附表); 外键所指向的主键所在的 ...

最新文章

  1. Redis系列二:reids介绍
  2. Ajax调用MVC控制器参数为实体
  3. Openresty 预编译安装教程
  4. 数学建模 TSP(旅行商问题) Lingo求解
  5. iOS中安全结束 子线程 的方法
  6. SPOJ Problem 6219:Edit distance
  7. python小屋_Python小屋——Python语言基础(一)
  8. Java学习笔记(2)----散列集/线性表/队列/集合/图(Set,List,Queue,Collection,Map)
  9. 为猿七年有余,痒否?痛否?
  10. [高通SDM450][Android9.0]PL2303G驱动升级
  11. 【Excel】【行列转换:转置粘贴 or TRANSPOSE】
  12. 计算机文件夹怎样显示隐藏文件,显示隐藏文件夹,教您电脑如何显示隐藏文件夹...
  13. 人工智能的隐私保护探讨
  14. 笔记:《高效能人士的七个习惯》第七章 习惯四 双赢思维——人际领导的原则
  15. 备忘4:爬取微博热门信息以及所有热门微博转发的用户信息
  16. 陕师大民教育计算机试题,陕师大计算机研究生考试真题2010年试题.doc
  17. Perfetto工具集之traced_perf
  18. zFuse for Mac(视频播放软件)
  19. 《Effective Java》中文版第3版 读书笔记
  20. TNS-12543: TNS:destination host unreachable

热门文章

  1. 【PAT乙级】1081 检查密码 (15 分)
  2. 2.3.11 管程
  3. Keepalived安装
  4. MySQL带EXISTS关键字的子查询
  5. 太火了!MyBatis Plus 为啥这么牛?
  6. Handler消息传递机制(一)
  7. Java常用类之String类练习
  8. 前端模板引擎Thymeleaf快速入门
  9. (网络编程)UDP实现聊天
  10. 「归纳|总结」程序员必知必会的十大排序算法