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表的关联关系的主要内容,如果未能解决你的问题,请参考以下文章

Python Web开发:数据库表的关联

Mysql学生管理系统:表的建立,外键一对多,多对多关系,中间关联表的建立

Mysql外键和表关系

mysql啥时候使用子查询,啥时候使用表连接查询,关系多张表的时候该怎么查询

mybatis一对一关联关系映射

表与表的关联关系