MySQL多表操作的外键约束
目录
一.多表关系
一对一关系
一对多/多对一关系
多对多关系
二.外键约束
特点
创建外键约束
方式1-在创建表时设置外键约束
方式2-在创建表时设置外键约束
在外键约束下的操作
1.数据插入
2.删除数据
3.删除外键约束
外键约束-多对多关系
操作
一.多表关系
MySQL多表之间的关系可以概括为:一对一、一对多/多对一关系,多对多
一对一关系
一个学生只有一张身份证;一张身份证只能对应一学生。
在任一表中添加唯─外键,指向另一方主键,确保一对一关系。
一般一对一关系很少见,遇到一对一关系的表最好是合并表。
一对多/多对一关系
部门和员工
分析:一个部门有多个员工,一个员工只能对应一个部门实现原则:在多的一方建立外键,指向一的一方的主键
多对多关系
学生和课程
分析:一个学生可以选择很多门课程,一个课程也可以被很多学生选择
原则:多对多关系实现需要借助第三张中间表。中间表至少包含两个字段,将多对多的关系,拆成一对多的关系,中间表至少要有两个外键,这两个外键分别指向原来的那两张表的主键
二.外键约束
MySQL外键约束(FOREIGN KEY)是表的一个特殊字段,经常与主键约束一起使用。对于两个具有关联关系的表而言,相关联字段中主键所在的表就是主表(父表),外键所在的表就是从表(子表)。
外键用来建立主表与从表的关联关系,为两个表的数据建立连接,约束两个表中数据的一致性和完整性。比如,一个水果摊,只有苹果、桃子、李子、西瓜等4种水果,那么,你来到水果摊要买水果就只能选择苹果、桃子、李子和西瓜,其它的水果都是不能购买的。
特点
定义一个外键时,需要遵守下列规则:
- 主表必须已经存在于数据库中,或者是当前正在创建的表。
- 必须为主表定义主键。
- 主键不能包含空值,但允许在外键中出现空值。也就是说,只要外键的每个非空值出现在指定的主键中,这个外键的内容就是正确的。
- 在主表的表名后面指定列名或列名的组合。这个列或列的组合必须是主表的主键或候选键。
- 外键中列的数目必须和主表的主键中列的数目相同。
- 外键中列的数据类型必须和主表主键中对应列的数据类型相同。
创建外键约束
方式1-在创建表时设置外键约束
在create table语句中,通过foreign key关键字来指定外键,具体的语法格式如下:
use world;
-- 创建部门表
create table if not exists dept(deptno varchar(20) primary key , -- 部门号name varchar(20) -- 部门名字
);-- 创建员工表
create table if not exists emp2(eid varchar(20) primary key , -- 员工编号ename varchar(20), -- 员工名字age int, -- 员工年龄dept_id varchar(20), -- 员工所属部门constraint emp2_fk foreign key (dept_id) references dept(deptno)
);
方式2-在创建表时设置外键约束
外键约束也可以在修改表时添加,但是添加外键约束的前提是:从表中外键列中的数据必须与主表中主键列中的数据一致或者是没有数据。
-- 创建部门表
create table if not exists dept(deptno varchar(20) primary key , -- 部门号name varchar(20) -- 部门名字
);-- 创建员工表
create table if not exists emp2(eid varchar(20) primary key , -- 员工编号ename varchar(20), -- 员工名字age int, -- 员工年龄dept_id varchar(20) -- 员工所属部门
);
alter table emp2 add constraint emp2_fk foreign key (dept_id) references dept(deptno);
在外键约束下的操作
1.数据插入
2.删除数据
3.删除外键约束
当一个表中不需要外键约束时,就需要从表中将其删除。外键一旦删除,就会解除主表和从表间的关联关系
格式
实现
外键约束-多对多关系
在多对多关系中,A表的一行对应B的多行,B表的一行对应A表的多行,我们要新增加一个中间表,来建立多对多关系。
操作
修改和删除时,中间从表可以随便删除和修改,但是两边的主表受从表依赖的数据不能删除或者修改
MySQL多表操作的外键约束相关推荐
- mysql创建表时设置外键_mysql创建表时设置外键约束的方法
mysql创建表时设置外键约束的方法 发布时间:2020-06-17 15:54:11 来源:亿速云 阅读:312 作者:元一 MySQL是一种关系型数据库管理系统,关系数据库将数据保存在不同的表中, ...
- MySQL表的非外键约束
MySQL表的非外键约束 /* 建立一张用来存储学生信息的表 字段包含学号.姓名.性别,年龄.入学日期.班级,email等信息 学号是主键 = 不能为空 +? 唯一 姓名不能为空 性别默认值是 ...
- 使用MySQL数据库创建表时添加外键约束
/题目:创建表Book表,字段如下: bid整型,要求主键 bname学符型,要求设置唯一键,并非空 price浮点型,要求有默认值10 btypeId 类型编号,要求引用bookType表的id字段 ...
- 修改表结构添加外键约束,默认外键名
2019独角兽企业重金招聘Python工程师标准>>> 修改表结构添加外键约束,默认外键名 alter table SUPPLIER_INFO add foreign key (CR ...
- (19)一篇掌握MySQL数据库基础下 基本操作(外键约束、建表原则、多表查询、子查询)
MySQL数据库基础下 一.修改表--添加外键约束 二.多表之间的建表原则 1.建数据库原则:通常情况下,一个项目/应用建一个数据库 2.多表之间的表原则: (1)一对多:分类和商品 (一个分类对应多 ...
- mysql key constraint_MySQL/InnoDB的外键约束(Foreign Key Constraint)
MySQL/InnoDB的外键约束(Foreign Key Constraint) SQL外键约束 一个表中的 FOREIGN KEY 指向另一个表中的 PRIMARY KEY. FOREIGN KE ...
- mysql on delete关键字_MySQL外键约束On Delete、On Update各取值的含义
主键.外键和索引的区别? 主键 外键 索引 定义: 唯一标识一条记录,不能有重复的,不允许为空 表的外键是另一表的主键,外键可以有重复的,可以是空值 主索引(由关键字PRIMARY定义的索引),用于表 ...
- MySQL:错误代码1215 无法添加外键约束的解决思路
环境说明: ※MySQL ver:5.7 当你需要添加外键约束的时候,却发现mysql报了个1215错误,一脸懵逼的找到这个博客,那你的问题可能就会得到解决. 解决思路 1.检查两个字段的数据类型是否 ...
- MySQL导入数据,存在外键约束不能导入数据的处理方式
我们通常导入数据脚本的时候会遇到如下错误: 1451 -Cannot delete or update a parent row: a foreign key constraint fails (.. ...
最新文章
- sequoiadb sdbexprt 导入工具进阶使用
- python免费试听-小栈春季编程免费试听课 倒数6天!
- 对于写bash脚本的朋友,read命令是不可或缺的,需要实践一下就可以了解read命令的大致用途: 编写一个脚本: #!/bin/bash # hao32 test read echo -e Pl
- 阿里云使用public_key登录ssh
- 图解JAVA参数传递
- 共享锁与排它锁区别(转)
- Android学习笔记---09_深入了解各种布局技术
- 【报告分享】bilibili 2020品牌营销手册.pdf(附下载链接)
- Arcgis Javascript那些事儿(三)---arcgis sever服务器注册关于数据拷贝问题
- linux怎样安装麒麟双系统,U盘启动中标麒麟V6双系统安装教程
- hdoj1290切球形蛋糕(递推和划分问题)
- SOUI控件的自绘和消息处理
- c语言字符二维数组指针赋值,C语言之二维数组与指针
- 2018 年计算机语言排行榜,TIOBE:2018年11月编程语言排行榜
- oracle 11g从DBF文件恢复数据
- Excel文件解析和结果回写
- TRS内容管理平台用户注册逻辑漏洞
- 优雅的99乘法表以及format使用
- “中国天眼”观测到宇宙极端爆炸起源证据
- 实现简易版德州扑克|学习麻瓜编程以项目为导向入门前端 HTML+CSS+JS