简介:在一个项目当中,通常需要许多个表之间建立一定的联系才能够完成,所以我们需要在单表操作的基础之上学会如何多表操作
-- 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 '王%' ;