关于Mysql外键从新学习
关于Mysql外键从新学习
参考:https://blog.csdn.net/u010373419/article/details/9321331
说实话,这是一个抄剩饭的文档。
为什么会从新学习外键
因为考试。
在实际开发中,可能用外键的情况不多,至少我设计我自己的项目是不会用外键。用了后,数据不自由了。当然,如果表设计后,给数据表加上外键,可能是一种不错的选择,但,自己的项目还是不会使用外键来约束自己的数据。至少我在代码中,做到部分的数据约束。
Mysql外键的关键
Innodb,如果引擎不是Innodb是无法添加外键的。我试了,一个小时,看了很多文档,然后51jb的网站一个文章讲了关于Innodb,必须是Innodb,否则外键的设置会失效。(虽然那个CSDN的博文也讲了,但我确实试了一个小时,总以为是我的代码的问题)
代码
建表
CREATE TABLE class(
id INT PRIMARY KEY AUTO_INCREMENT,
cname VARCHAR(20) NOT NULL
)ENGINE = INNODB DEFAULT CHARSET=utf8;
CREATE TABLE student(
id INT PRIMARY KEY AUTO_INCREMENT,
sname VARCHAR(20) NOT NULL,
cid INT NOT NULL,
CONSTRAINT stu_f_key FOREIGN KEY (cid) REFERENCES class(id) ON UPDATE CASCADE
)ENGINE = INNODB DEFAULT CHARSET=utf8;
# 插入数据
INSERT INTO class(cname) VALUES('计应1班'),('计应2班');
INSERT INTO student(sname,cid) VALUES('小皮',1),('小王',2);

操作
因为使用了 on update cascade
使用,我们修改class的id,相应的student的cid也会改变
UPDATE class SET id = 3 WHERE id = 1;
SELECT * FROM student;

关于on delete cascade
on delete xxx,on update xxx 属于级联操作,使用on delete时候要小心,因为如果使用on delete cascade ,如果删了class的实例,则会删除student的实例。
on delete set null。当外键所约束的实例被删除时,将当前实例的所有字段值设置为空。
总结
其实用级联很少,总是听别人说影响效率,当然,数据小的时候,不会出什么问题。如果数据大了,则需要优化数据库和查询语句。(不过这些目前我都没有学)。
关于Mysql外键从新学习的更多相关文章
- mysql 外键约束备注
梳理mysql外键约束的知识点. 1.mysql外键约束只对InnoDb引擎有效: 2.创建外键约束如下: DROP TABLE IF EXISTS t_demo_product; CREATE TA ...
- MySQL外键之级联
简介 MySQL外键起到约束作用,在数据库层面保证数据的完整性.例如使用外键的CASCADE类型,当子表(例如user_info)关联父表(例如user)时,父表更新或删除时,子表会更新或删除记录,这 ...
- MySQL外键约束On Delete、On Update各取值的含义
主键.外键和索引的区别? 主键 外键 索引 定义: 唯一标识一条记录,不能有重复的,不允许为空 表的外键是另一表的主键, 外键可以有重复的, 可以是空值 主索引(由关键字PRIMARY定义的索引) ...
- Mysql 外键设置
MySql外键设置详解 (1) 外键的使用: 外键的作用,主要有两个: 一个是让数据库自己通过外键来保证数据的完整性和一致性 一个就是能够增加ER图的可读性 有些人认为外键的建立会给 ...
- MySQL外键的作用和创建
MySQL外键的作用: 保持数据一致性,完整性,主要目的是控制存储在外键表中的数据.使两张表形成关联,外键只能引用外表中列的值! 我们来建两个表 CREATE TABLE `example1` ( ` ...
- Mysql外键的使用
MySQL外键(请确保数据库是innodb类型)网上有很多介绍的文章,这里我就凭自己的理解再次整理了下,废话不多说,直入正题哈.外键的作用: 保持数据一致性,完整性,主要目的是控制存储在外键表中的数据 ...
- mysql 外键和子查询,视图
1.mysql 外键约束 建表时生成外键 foreing key ('sid') references' student'('id'); 建表后添加外键 alter table' course ...
- mysql外键使用和事物使用
mysql外键功能主要是为了保证关联表数据的一致性,主要目的是控制存储在外键表中的数据. 使两张表形成关联,外键只能引用外表中的列的值! 例如: a b 两个表 a表中存有 客户号,客户名称 b表中存 ...
- Mysql外键设置中的CASCADE、NO ACTION、RESTRICT、SET NULL
转: Mysql外键设置中的CASCADE.NO ACTION.RESTRICT.SET NULL 2017年06月11日 10:03:13 雅静8 阅读数:5491 版权声明:本文为博主原创文章 ...
- mysql外键约束总结
总结三种MySQL外键约束方式 如果表A的主关键字是表B中的字段,则该字段称为表B的外键,表A称为主表,表B称为从表.外键是用来实现参照完整性的,不同的外键约束方式将可以使两张表紧密的结合起来,特别是 ...
随机推荐
- 抠网页标题栏logo(图标)
1.打开自己需要抠的网页,例如百度页面 2.在这个网页链接后面+" /favicon.ico " 就可以提取ico图片 3.回车进去,右键鼠标,选择另存为图片就可以成功保存网页中的 ...
- 基于python的数学建模---差分方程
一.递推关系--酵母菌生长模型 代码: import matplotlib.pyplot as plt time = [i for i in range(0,19)] number = [9.6,18 ...
- 18道经典链表题刷题总结——WeetCode1 链表系列
系列文章目录和关于我 前言: WeetCode = Week leetCode 寓意每周刷点leetCode 题目 链表是我恢复刷题手感最喜欢做的系列,其没用太多的算法思想,单纯考验对指针的理解,和c ...
- Python基础之数据库:2、MySQL的下载与安装、基本使用、系统服务制作
目录 一.MySQL简介 二.安装与下载 1.下载流程 2.配置环境变量 三.主要目录介绍 四.基本使用 五.系统服务的制作 六.密码相关 1.修改管理员密码 2.忘记密码 一.MySQL简介 M ...
- Cesium-03:洪水淹没
Cesium-01:Vue 中基础使用 Cesium-02:飞机模型简单点对点飞行 Cesium-03:洪水淹没 前言 最开始想做洪水淹没的话,查了一些资料.又基于不同的实现的,如 ArcScene ...
- 【SQL知识】SQL中的join操作总结:内连接、外连接(左右全)
一.含义 基于表之间的共同字段,把来自两个或多个表的行结合起来 二.分类 内连接:join / inner join 外连接:left join / right join / full outer j ...
- Python数据类型+运算符
Python基础数据类型 上期练习讲解 # 练习一.想办法打印出jason l1 = [11, 22, 'kevin', ['tony', 'jerry', [123, 456, 'jason'] ] ...
- Docker容器入门到精通
Docker 容器 快速入门 第一章:Docker容器 第二章:Dockerfile指令与Docker-compose容器编排-搭建docker私有仓库 h1 { color: rgba(0, 60, ...
- Go语言性能剖析利器--pprof实战
作者:耿宗杰 前言 关于pprof的文章在网上已是汗牛充栋,却是千篇一律的命令介绍,鲜有真正实操的,本文将参考Go社区资料,结合自己的经验,实战Go程序的性能分析与优化过程. 优化思路 首先说一下性能 ...
- Python 文件操作(IO 技术)
目录 Python 文件操作(IO 技术) 文本文件和二进制文件 文件操作相关模块概述 建文件对象 open() 文本文件的写入 write()/writelines()写入数据 close()关闭文 ...