MySQL数据库多表操作通关指南(外键约束和多表联合查询)

目录
  • 1 多表关系
  • 2 外键约束(FOREIGN KEY)
    • 2.1 外键约束说明
    • 2.2 外键约束的创建
    • 2.3 外键约束实操:一对多关系
    • 2.4 删除外键约束
    • 2.5 外键约束实操:多对多关系
  • 3 多表联合查询
    • 3.1 联合查询的简介和分类
    • 3.2 联合查询数据准备
    • 3.3 交叉联合查询
    • 3.4 内连接查询
    • 3.5 外连接查询
    • 3.6 子查询
      • 3.6.1 子查询说明与实操
      • 3.6.2 子查询中的关键字
    • 3.7 自关联查询
  • 写在最后

1 多表关系

一对一关系

比如:一个人有一个身份证,一个身份证对应一个人;实现原则:在任一表中添加唯一外键,指向另一方主键;在实际开发中遇到一对一情况比较少,遇到一对一关系一般合并表。在下图中,可以将两个表根据 id 合并:

一对多/多对一关系

比如:一个部门有多个员工,一个员工只能对应一个部门;实现原则:在多的一方建立外键,指向另一方的主键, 示意图如下:

多对多关系

比如:一个学生可以修多个课程,一个课程也可以被多个学生选择;实现原则:多对多关系实现需要借助第三张中间表。中间表至少包含两个字段,将多对多的关系,折成一对多的关系,中间表至少要有两个外键,这两个外键分别指向原来两个表的主键, 示意图如下:

2 外键约束(FOREIGN KEY)

2.1 外键约束说明

简介:

  MySQL 外键约束是表的一种特殊字段,经常与主键约束一起使用。对于两个具有关联关系的表而言,相关联字段中主键所在的表就是主表(父表),外键所在的表就是从表(子表)。

  外键约束用来建立主表与从表的关联关系,为两个表的数据建立连接,约束两个表中数据的一致性和完整性。

举例说明:

  在下图中,从表中的部门号受主表中的主键部门号的范围限制, 即,从表中的部门号列只能取值为1001、1002或1003。

定义外键的规则:

  1. 主表必须已经存在于数据库中,或者是当前正在创建的表(即在创建外键时,主表必须存在);
  2. 必须为主表定义主键;
  3. 主键不能包含空值,但允许在外键中出现空值;
  4. 在主表的表名后面指定列名或列名的组合,这个列或者组合必须是主表的主键或候选键;
  5. 外键中列的数目必须和主表的主键中列的数目相同(通俗解释:主键的列数必须与外键的列数相同);
  6. 外键中列的数据类型必须和主表主键中对应列的数据类型相同。

2.2 外键约束的创建

(0)

相关推荐

  • mysql多表连接查询实例讲解

    实际的项目,存在多张表的关联关系.不可能在一张表里面就能检索出所有数据.如果没有表连接的话,那么我们就需要非常多的操作.比如需要从A表找出限制性的条件来从B表中检索数据.不但需要分多表来操作,而且效率也不高.比如书中的例子: 代码如下: SELECT FId FROM T_Customer WHERE FName='MIKE' 这个SQL语句返回2,也就是姓名为MIKE 的客户的FId值为2,这样就可以到T_Order中检索FCustomerId等于2 的记录: 代码如下: SELECT FNu

  • MySQL数据库高级查询和多表查询

    MySQL多表查询 添加练习表 -- 用户表(user) CREATE TABLE `user`( `id` INT AUTO_INCREMENT PRIMARY KEY COMMENT '用户id(主键)', `username` VARCHAR(50) COMMENT '用户姓名', `age` CHAR(3) COMMENT '用户年龄' ); -- 订单表(orders) CREATE TABLE `orders`( `id` INT AUTO_INCREMENT PRIMARY KEY

  • MySQL多表数据记录查询详解

    在实际应用中,经常需要实现在一个查询语句中显示多张表的数据,这就是所谓的多表数据记录连接查询,简称来年将诶查询. 在具体实现连接查询操作时,首先将两个或两个以上的表按照某个条件连接起来,然后再查询到所要求的数据记录.连接查询分为内连接查询和外连接查询. 在具体应用中,如果需要实现多表数据记录查询,一般不使用连接查询,因为该操作效率比较低.于是MySQL又提供 了连接查询的替代操作,子查询操作. 1.关系数据操作:  在连接查询中,首先需要对两张或两张以上的表进行连接操作.连接操作是关系数据操作中

  • MySQL多表链接查询核心优化

    概述 在一般的项目开发中,对数据表的多表查询是必不可少的.而对于存在大量数据量的情况时(例如百万级数据量),我们就需要从数据库的各个方面来进行优化,本文就先从多表查询开始.其他优化操作,后续另外更新,敬请关注. 数据背景 现假设有一个中学学校,学校中的年级有一年级.二年级.三年级,每个年级有两个班级.分别为101.102.201.202.301.302. 现在我们要为这个学校建立一个考试成绩统计系统.为此,我们对数据库的设计画了如下ER图: 根据ER图,我们设计了数据表,结构如下: class

  • mysql多表联合查询操作实例分析

    本文实例讲述了mysql多表联合查询操作.分享给大家供大家参考,具体如下: MySQL多表联合查询是MySQL数据库的一种查询方式,下面就为您介绍MySQL多表联合查询的语法,供您参考学习之用. MySQL多表联合查询语法: 复制代码 代码如下: SELECT * FROM 插入表 LEFT JOIN 主表 ON t1.lvid=t2.lv_id select * from mytable,title where 表名1.name=表名2.writer ; mysql版本大于4.0,使用UNIO

  • MySQL多表查询的具体实例

    一 使用SELECT子句进行多表查询 SELECT 字段名 FROM 表1,表2 - WHERE 表1.字段 = 表2.字段 AND 其它查询条件 SELECT a.id,a.name,a.address,a.date,b.math,b.english,b.chinese FROM tb_demo065_tel AS b,tb_demo065 AS a WHERE a.id=b.id 注:在上面的的代码中,以两张表的id字段信息相同作为条件建立两表关联,但在实际开发中不应该这样使用,最好用主外键

  • MySQL多表连接查询详解

    目录 多表连接查询 内连接 左连接 右连接 子查询 总结 多表连接查询 表与表之间的连接分为内连接和外连接 内连接:仅选出两张表互相匹配的记录 外连接:既包括两张表匹配的记录,也包括不匹配的记录,同时外连接又分为左外连接(左连接)和右外连接(右连接) 内连接 首先准备两张表 学生student表 分数score表 内连接:在每个表中找出符合条件的共有记录 查询student表中的学生姓名和分数 第一种写法:只使用where select a.s_name, b.s_score from stud

  • MySQL中基本的多表连接查询教程

    一.多表连接类型 1. 笛卡尔积(交叉连接) 在MySQL中可以为CROSS JOIN或者省略CROSS即JOIN,或者使用','  如: 由于其返回的结果为被连接的两个数据表的乘积,因此当有WHERE, ON或USING条件的时候一般不建议使用,因为当数据表项目太多的时候,会非常慢.一般使用LEFT [OUTER] JOIN或者RIGHT [OUTER] JOIN 2.   内连接INNER JOIN 在MySQL中把I SELECT * FROM table1 CROSS JOIN tabl

  • Mysql update多表联合更新的方法小结

    下面我建两个表,并执行一系列sql语句,仔细观察sql执行后表中数据的变化,很容易就能理解多表联合更新的用法 student表 class表 1. 执行 UPDATE student s , class c SET s.class_name='test00',c.stu_name='test00' WHERE s.class_id = c.id student表 class表 2. 执行 UPDATE student s JOIN class c ON s.class_id = c.id SET

  • MySQL 多表查询实现分析

    我们继续使用前面的例子.前面建立的表中包含了员工的一些基本信息,如姓名.性别.出生日期.出生地.我们再创建一个表,该表用于描述员工所发表的文章,内容包括作者姓名.文章标题.发表日期. 1.查看第一个表 mytable 的内容: mysql> select * from mytable; +----------+------+------------+-----------+ | name | sex | birth | birthaddr | +----------+------+-------

随机推荐