MySQL表的关联关系

白花蛇
• 阅读 1472

  在实际开发中数据表之间存在着各种关联关系。在此,介绍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';

点赞
收藏
评论区
推荐文章
Stella981 Stella981
3年前
Go 语言编程 — gorm 的数据完整性约束
目录文章目录目录实体完整性(主键约束)用户定义完整性(非空约束、唯一约束、检查约束和默认值)参照完整性(外键约束)关联关系一对一、一对多关联多对多关联示例实体完整性(主键约束)每个关系(表)至少存在一个主
Stella981 Stella981
3年前
Django之ORM(多对多)
一、ManyToManyField1、classRelatedManager"关联管理器"是在一对多或者多对多的关联上下文中使用的管理器。它存在于下面两种情况:1.外键关系的反向查询2.多对多关联关系简单来说就是当 点后面的对象 可能存在多个的时
Stella981 Stella981
3年前
Ruby on Rails,一对多关联(One
在上一篇文章中,我们知道通过has\_one和belongs\_to方法定义一对一关联关系。接下来是更常见的情况,一对多关联。比如老师与所教课程的关系,一个老师负责多个课程。换成对象之间的关系就是:一个老师hasmay课程,课程belongsto老师。!(http://img.my.csdn.net/uploads/201212/02/13
Wesley13 Wesley13
3年前
mysql面试题及答案
01\.列举常见的关系型数据库和非关系型都有那些?1.关系型数据库通过外键关联来建立表与表之间的关系,常见的有:SQLite、Oracle、mysql2.非关系型数据库通常指数据以对象的形式存储在数据库中,而对象之间的关系通过每个对象自身的属性来决定常见的有:MongoDb、redis02\.MySQL常见数据库引擎
Stella981 Stella981
3年前
Hibernate利用关联关系操纵对象
Hibernate利用关联关系操纵对象数据对象之间关联关系有一对一、一对多及多对多关联关系。在数据库操作中,数据对象之间的关联关系使用JDBC处理很困难。本节讲解如何在Hibernate中处理这些对象之间的关联关系。本节使用到4个类,它们分别是Student(学生)、Card(学生证)、Group(班级)和Cou
Wesley13 Wesley13
3年前
@OneToMany、@ManyToOne以及@ManyToMany讲解(五)
一、一对多(@OneToMany)1、单向一对多模型假设通过一个客户实体可以获得多个地址信息。对于一对多的实体关系而言,表结构有两种设计策略,分别是外键关联和表关联。(1)映射策略外键关联在数据库中表customer和表结构address定义,如下:createtablecustomer(
Stella981 Stella981
3年前
Django框架(七):模型(三) 关联、模型类的属性
1\.关联1.1模型类关系关系型数据库的关系包括三种类型:ForeignKey:一对多,将字段定义在多的一端中。ManyToManyField:多对多,将字段定义在任意一端中。OneToOneField:一对一,将字段定义在任意一端中。1.1.1一对多关系
Wesley13 Wesley13
3年前
3 OneToMany ManyToMany MappedBy Cascade
1双向1N关联对于1N关联,Hibernate推荐使用双向关联,而且不要让1的一方控制关联关系,而使用多的一方控制关联关系。a.一的一方 表示班级@Entity@Table(name"team_1")publicclassTeam{@Id@Gen
Stella981 Stella981
3年前
Hibernate关键字inverse和cascade
维护关联关系中,是否设置inverse属性:1.保存数据有影响。如果设置控制反转,即inversetrue,然后通过部门方维护关联关系。在保存部门的时候,同时保存员工,数据会保存,但关联关系不会维护。即外键字段为NULL2.获取数据无。3.解除关联关系?有影响。inverse
Stella981 Stella981
3年前
Hibernate 单向的一对多关联映射
单向的一对多关联关系(OnetoMany)对象模型关系分析:少的一端:会通过引用一个多端的集合对象,建立对象模型关系多的一端:没有任何变化,不知道和少的一端存在着关系。关系模型分析:少的一端:没有任何变化多的一端:会和少的一端建立外键关系使用时需要少的一端所对应的XXX.hbm.xml中进行配置<bagname"对多的
Stella981 Stella981
3年前
Django多对多模型自定义中间媒介(through)在运行期的表现
使用自定义中间媒介来实现多对多关系的时候,主要的目的是在中间媒介中保存关系的特有属性。举个例子,比如学生与课程之间的关系就属于多对多的,而且当学生与课程建立关系之后随之还会产生附属的属性,如:成绩。如下例:<!lang:pythonclassStudent(models.Model):name