MYSQL-多表操作-外键约束

本文涉及的产品
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
RDS MySQL Serverless 高可用系列,价值2615元额度,1个月
云数据库 RDS PostgreSQL,高可用系列 2核4GB
简介: MYSQL-多表操作-外键约束

 简介:在一个项目当中,通常需要许多个表之间建立一定的联系才能够完成,所以我们需要在单表操作的基础之上学会如何多表操作

-- MYSQL当中的表跟表之间的联系可以大概的分为三种:

-- 1.一对一

-- 2.一对多 || 多对一 (相对的)

-- 3.多对多

多表操作--外键约束:

外键约束通常跟主键约束一起进行使用,例如,对于两个相互有关联的表来说,相关联字段的主键所在的表就叫做是主表,外键所在的表就是从表

-- 关键字:  foreign key


一:建立外键约束的要求:

1、在表上建立外键,主表应先存在。

2、一个表可以建立多个外键约束。

3、从表的外键列必须指向主表的主键列。

4、从表的外键列可以与主表参考的列名不同,但数据类型必须相同。


二:操作方法:有两种设置外键约束的方法:

-- 方法一:
create table if not exists bumen(
detpno varchar(20) primary key,
name VARCHAR(20)
);
 
create table if NOT exists emp(
eid VARCHAR(20) PRIMARY KEY,
name VARCHAR(20),
age int,
dept_id VARCHAR(20),
constraint bumen_emp-- 随便起的有关两个表之间联系的名称,方便之后进行删除 
FOREIGN key emp(dept_id) 
REFERENCES bumen(detpno) 
);
-- 方法二:
create table if NOT exists emp(
eid int PRIMARY KEY auto_increment,
name VARCHAR(20),
age int,
dept_id VARCHAR(20)
);
ALTER table emp add constraint bumen_emp
foreign key (dept_id)
REFERENCES bumen(detpno);


二:外键约束操作:

       1>.增加数据:

tips:

       1.必须首先给主键进行添加数据,之后才能添加从表的数据!两者之间存在某种联系

       2.在给从表添加数据的时候,不能随便的进行添加,要随时记得从表当中某些列跟主表有关系!基于主表的数据进行添加

insert into bumen VALUES('1001','销售部');
insert into bumen VALUES('1002','研发部');
insert into bumen VALUES('1003','财务部');
insert into bumen VALUES('1004','人事部');
 
insert into emp values(null,'乔峰',20,'1001');
insert into emp values(null,'段誉',21,'1001');
insert into emp values(null,'虚竹',23,'1001');
insert into emp values(null,'阿紫',18,'1002');
insert into emp values(null,'扫地僧',35,'1002');
insert into emp values(null,'李秋水',33,'1003');
insert into emp values(null,'鸠摩智',50,'1003');
 
-- 在这里,这条数据无法进行添加,是因为在主表当中并没有存在这个数据,所以从表无法根据主表进行添加!
insert into emp values(null,'天山童姥',20,'1005');

 2>删除数据:

               1.外键约束删除表的时候,只能够先删除从表,之后才能够删除主表,因为两者之间存在约束


               2.在删除表当中的数据上,主表的数据如果在从表当中有使用到,那么不能够随便删除,从表当中没有才能够删除


-- 示例:
DELETE from bumen where deptno='1001'; -- 无法删除,因为从表当中有相关的数据
DELETE from bumen where detpno='1004';-- 可以删除,因为从表当中没有存在有关1004的数据

  3.对于从表当中的数据,所有的数据都能够进行删除,并没有条件的限制

DELETE from emp where eid=5;
-- 也可以直接清空整个表当中的数据
DELETE from emp;
 
TRuncate emp;


三:外键约束删除:

-- 删除外键约束
alter table emp drop FOREIGN key bumen_emp;
-- alter table 从表名称 drop foreign 外键约束的名称


四:多对多表的操作:

两个表之间,可能有多对多之间的关联,所以,如果需要建立多对多之间的关系,就需要中间表将两者联系起来才行,因此,多对多的外键约束建立,实际上就是多个  一对多||多对一  联系起来即可

关键语句:alter table (从表表名)(tips:中间表的表名) add [constraint (名称) ]  foreign key (从表列)

references 主表名(主表列);

-- 首先需要先建立主表,以及中间的从表
create table if not exists student(
id int,
name VARCHAR(20) PRIMARY KEY,
age int,
gender VARCHAR(20)
);
 
CREATE table course(
id int,
course varchar(20) PRIMARY key
);
 
 
CREATE table mids(
name VARCHAR(20),
course VARCHAR(20),
score int
);
 
-- 给课程表添加数据
insert into course VALUES(1,'语文');
insert into course VALUES(2,'数学');
insert into course VALUES(3,'英语');
 
-- 建立两个主表跟从表之间的联系
-- tips:从表的外键列必须!指向主表的主键列才行!!!
alter table mids 
add CONSTRAINT mid_student
foreign key(name) references student(name);
 
alter table mids 
add CONSTRAINT mid_course
FOREIGN key(course)
REFERENCES course(course);
 
 
-- 给学生表当中先添加数据
insert into student VALUES(1,'王1',19,'男');
insert into student VALUES(2,'秦1',19,'男');
insert into student VALUES(3,'王2',18,'男');
DELETE from student;
-- 给中间表添加数据
DELETE from mids;
insert into mids VALUES('王1','语文',98);
insert into mids VALUES('王1','数学',97);
insert into mids VALUES('秦1','英语',96);
insert into mids VALUES('秦1','语文',99);
insert into mids VALUES('王2','英语',100);
 
select * from mids where name like '王%' ;
相关实践学习
每个IT人都想学的“Web应用上云经典架构”实战
本实验从Web应用上云这个最基本的、最普遍的需求出发,帮助IT从业者们通过“阿里云Web应用上云解决方案”,了解一个企业级Web应用上云的常见架构,了解如何构建一个高可用、可扩展的企业级应用架构。
MySQL数据库入门学习
本课程通过最流行的开源数据库MySQL带你了解数据库的世界。   相关的阿里云产品:云数据库RDS MySQL 版 阿里云关系型数据库RDS(Relational Database Service)是一种稳定可靠、可弹性伸缩的在线数据库服务,提供容灾、备份、恢复、迁移等方面的全套解决方案,彻底解决数据库运维的烦恼。 了解产品详情: https://www.aliyun.com/product/rds/mysql 
相关文章
|
2月前
|
存储 安全 关系型数据库
MySQL数据库约束条件概述及其重要性讨论。
正确地实现并管理好各类紧缩条件将直接影响到企业信息管理水平与服务质量,在当今大数据背景下更显得格外重要;任何设计师都需要深刻理解其原理与运作机晰承担起责任使得所托管资料安全稳固同时又具备良好伸缩灵活度迎合日益复杂商务需求变动.
95 11
|
11月前
|
NoSQL 关系型数据库 MySQL
2024Mysql And Redis基础与进阶操作系列(4-2)作者——LJS[含MySQL非空、唯一性、PRIMARY KEY、自增列/自增约束举例说明等详解步骤及常见报错问题对应的解决方法]
24MySQL非空、唯一性、PRIMARY KEY、自增列/自增约束举例说明等详解步骤及常见报错问题对应的解决方法(4-2) 学不会你来砍我!!!
|
SQL 运维 关系型数据库
MySQL 中 GRANT 操作会引起复制中断吗?
GRANT 操作并不是一个原子性操作,不管执行成功与否,都会触发一个隐式重载授权表的行为。 在生产环境中需要规范用户创建及授权的操作,不推荐使用 DML 语句去直接变更 mysql.user 表,可能会引发其他的问题,若使用了 DML 语句进行变更, 需要手工执行 flush privileges。
216 4
|
10月前
|
存储 SQL 关系型数据库
【MySQL基础篇】MySQL约束语法
文章介绍了MySQL中表的约束概念,包括非空、唯一、主键、默认和外键约束,以及如何在创建和修改表时指定这些约束。外键约束用于保持数据的一致性和完整性,文章通过示例展示了添加、删除外键的语法,并讨论了不同的删除/更新行为,如CASCADE和SETNULL。
【MySQL基础篇】MySQL约束语法
|
JavaScript 关系型数据库 MySQL
创建nodejs项目并接入mysql,完成用户相关的增删改查的详细操作
创建nodejs项目并接入mysql,完成用户相关的增删改查的详细操作
196 0
|
11月前
|
关系型数据库 MySQL 数据处理
MySQL函数与约束
MySQL 提供了丰富的函数和强大的约束机制,用于数据处理和完整性维护。通过掌握这些工具,可以有效地管理和分析数据库中的数据,确保数据的一致性和准确性。无论是在日常数据查询中使用内置函数,还是在数据库设计中应用各种约束,都是确保数据库系统稳定、高效运行的关键。希望本文对您理解和应用 MySQL 函数与约束有所帮助。
133 1
|
10月前
|
存储 关系型数据库 MySQL
MySQL(条件约束)
为了校验数据,让数据的正确性能够得到保证,约束,能够引进更多的检查操作,但是也会增加系统的成本开销
|
12月前
|
Ubuntu 关系型数据库 MySQL
ubuntu使用aliyun源+mysql删除有外键约束的数据+查看特定目录的大小
ubuntu使用aliyun源+mysql删除有外键约束的数据+查看特定目录的大小
160 4
|
关系型数据库 MySQL 测试技术
MySQL外键使用的考量与建议
综上所述,虽然MySQL的外键提供了一种强大的工具来维护数据之间的一致性和完整性,但在决定是否使用外键时,需要权衡其带来的好处和潜在的性能影响。通过仔细的规划和测试,可以最大化地利用外键的优势,同时避免一些常见的陷阱。
96 3
|
SQL 关系型数据库 MySQL
MySQL中外键的使用及外键约束策略
这篇文章讨论了MySQL中使用外键的重要性,包括外键的概念、不使用外键可能导致的问题、如何设置外键约束以及不同的外键约束策略(如CASCADE和SET NULL),并通过示例演示了这些概念。
MySQL中外键的使用及外键约束策略

推荐镜像

更多