MySQL表的关联关系
Posted C
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了MySQL表的关联关系相关的知识,希望对你有一定的参考价值。
在实际开发中数据表之间存在着各种关联关系。在此,介绍mysql中数据表的三种关联关系。
多对一
多对一(亦称为一对多)是数据表中最常见的一种关系。例如:员工与部门之间的关系,一个部门可以有多个员工;而一个员工不能属于多个部门只属于某个部门。在多对一的表关系 中,应将外键建在多的一方否则会造成数据的冗余。
多对多
多对多是数据表中常见的一种关系。例如:学生与老师之间的关系,一个学生可以有多个老师而且一个老师有多个学生。通常情况下,为了实现这种关系需要定义一张中间表(亦称为连接表)该表会存在两个外键分别参照老师表和学生表。
一对一
在开发过程中,一对一的关联关系在数据库中并不常见;因为以这种方式存储的信息通常会放在同一张表中。
mysql安装:http://install.cuohei.com/
接下来,我们来学习在一对多的关联关系中如果添加和删除数据。先准备一些测试数据,代码如下:
DROP TABLE IF EXISTS student;
DROP TABLE IF EXISTS class;
-- 创建班级表
CREATE TABLE class(
cid int(4) NOT NULL PRIMARY KEY,
cname varchar(30)
);
-- 创建学生表
CREATE TABLE student(
sid int(8) NOT NULL PRIMARY KEY,
sname varchar(30),
classid int(8) NOT NULL
);
-- 为学生表添加外键约束
ALTER TABLE student ADD CONSTRAINT fk_student_classid FOREIGN KEY(classid) REFERENCES class(cid);
-- 向班级表插入数据
INSERT INTO class(cid,cname)VALUES(1,\'Java\');
INSERT INTO class(cid,cname)VALUES(2,\'Python\');
-- 向学生表插入数据
INSERT INTO student(sid,sname,classid)VALUES(1,\'tome\',1);
INSERT INTO student(sid,sname,classid)VALUES(2,\'lucy\',1);
INSERT INTO student(sid,sname,classid)VALUES(3,\'lili\',2);
INSERT INTO student(sid,sname,classid)VALUES(4,\'domi\',2);
1.关联查询
查询Java班的所有学生 MySQL命令:
select * from student where classid=(select cid from class where cname=\'Java\');
2.关于关联关系的删除数据
请从班级表中删除Java班级。在此,请注意:班级表和学生表之间存在关联关系;要删除Java班级,应该先删除学生表中与该班相关联的学生。否则,假若先删除Java班那么学生表中的cid就失去了关联
删除Java班 MySQL命令:
delete from student where classid=(select cid from class where cname=\'Java\');
delete from class where cname=\'Java\';
以上是关于MySQL表的关联关系的主要内容,如果未能解决你的问题,请参考以下文章
Mysql学生管理系统:表的建立,外键一对多,多对多关系,中间关联表的建立