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

MySQL数据库多表操作通关指南

当你开始处理大量的数据时,数据库中的单个表可能无法满足你的需要。这时候,多表操作就成为了必要的技能。本文将为你介绍 MySQL 数据库中的外键约束和多表联合查询,并提供实际的示例。

外键约束

为了在相关的表之间建立关系,MySQL 数据库提供了外键约束的功能。外键是一个表的列,它与另一个表的主键相关联。外键可以将数据分布在两个或更多的表中,并对它们之间的关系进行约束。

创建外键

创建外键需要满足以下条件:

  • 两个表必须使用 InnoDB 引擎。
  • 外键列和主键列必须具有相同的数据类型和长度。
  • 外键列和主键列必须加上 NOT NULL 约束。

接下来,我们将以学生表和学生选修表为例来演示如何创建外键。

先创建学生表:

CREATE TABLE student (
  `id` INT PRIMARY KEY AUTO_INCREMENT,
  `name` VARCHAR(20) NOT NULL,
  `age` INT NOT NULL
) ENGINE=InnoDB CHARSET=utf8mb4;

然后创建学生选修表:

CREATE TABLE stu_course (
  `id` INT PRIMARY KEY AUTO_INCREMENT, 
  `stu_id` INT NOT NULL,
  `course_id` INT NOT NULL,
  FOREIGN KEY (stu_id) REFERENCES student (id)
  ON DELETE CASCADE ON UPDATE CASCADE
) ENGINE=InnoDB CHARSET=utf8mb4;

其中,stu_id 是外键列,参照了学生表的 id 列。ON DELETE CASCADEON UPDATE CASCADE 设置了当主表中记录被删除或更新时,从表对应的记录也会被删除或更新。

删除外键

如果你需要删除一个外键,可以使用以下命令:

ALTER TABLE stu_course
DROP FOREIGN KEY fk_stu_id;

其中,fk_stu_id 是外键的名称。

多表联合查询

在多表联合查询中,我们可以根据需要从多个表中检索数据。通过使用 SQL 语句,可以创建具有不同的连接类型的查询。

我们可以使用以下类型:

  • INNER JOIN
  • LEFT JOIN
  • RIGHT JOIN
  • FULL OUTER JOIN

其中,INNER JOIN 返回两个表中相匹配的行,而 LEFT JOIN 和 RIGHT JOIN 返回一个表中的所有行和其他表中匹配的行,FULL OUTER JOIN 则返回两个表中所有的行。

下面我们来看两个示例说明。

示例一:使用 INNER JOIN 连接两个表

假设我们有一个学生表和一个学生选修表。我们想要查询每个学生选修的课程。

我们可以使用 INNER JOIN 连接两个表,然后检索我们需要的数据。

SELECT s.name, c.course_name  
FROM student s  
INNER JOIN stu_course sc ON s.id = sc.stu_id  
INNER JOIN course c ON sc.course_id = c.id;

以上操作会返回学生姓名和他们选修的课程。

示例二:使用 LEFT JOIN 连接两个表

假设我们有一个商品表和一个顾客订购表。我们想要查询所有商品及顾客订购该商品的情况。

我们可以使用 LEFT JOIN 连接两个表,然后检索我们需要的数据。

SELECT p.product_name, IFNULL(o.order_count, 0)  
FROM products p  
LEFT JOIN (  
  SELECT product_id, SUM(quantity) AS order_count  
  FROM orders  
  GROUP BY product_id  
) o ON p.id = o.product_id;

以上操作会返回商品名称和该商品被订购的数量。

总结

在开始编写多表联合查询之前,我们需要正确地了解表之间的关系,并明确我们所需的数据。随着经验的增长,我们可以更加了解不同类型的 JOIN,并可以使用它们更有效地检索数据。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:MySQL数据库多表操作通关指南(外键约束和多表联合查询) - Python技术站

(0)
上一篇 2023年5月22日
下一篇 2023年5月22日

相关文章

  • Sql Server 2008完全卸载方法(其他版本类似)第1/2页

    Sql Server 2008完全卸载方法(其他版本类似) 介绍 在卸载Sql Server 2008之前,需要确保已备份好相关数据库,并且注意到卸载过程可能会涉及到其他应用程序的影响。 卸载方法 第1步:使用控制面板卸载程序 在控制面板中,点击“程序和功能”,找到“Sql Server 2008”,右键选择“卸载/更改”,按照提示完成卸载过程。 第2步:手…

    database 2023年5月22日
    00
  • Windows系统安装redis数据库

    Windows系统安装Redis数据库 Redis是一个高性能的NoSQL数据库,常被用作内存数据库和缓存。本文将介绍在Windows系统上如何安装Redis数据库。 步骤一:下载Redis 在Redis官网上下载最新的Windows版本,网址为:https://github.com/microsoftarchive/redis/releases。 根据需要…

    database 2023年5月22日
    00
  • CentOS中使用Shell脚本实现每天自动备份网站文件和数据库并上传到FTP中

    下面是CentOS中使用Shell脚本实现每天自动备份网站文件和数据库并上传到FTP中的完整攻略。 1. 准备工作 在开始之前,我们需要先进行一些准备工作。 1.1 安装必要的软件 首先,我们需要安装一些必要的软件,包括mysqldump、tar和ftp等。可以使用以下命令进行安装: yum install mysql mysql-server mysql-…

    database 2023年5月22日
    00
  • ORACLE 12C PDB 维护基础知识介绍

    ORACLE 12C PDB 维护基础知识介绍 什么是ORACLE 12C PDB ORACLE 12C PDB 是Oracle数据库12C版本中提供的一种新的数据库容器化技术,其全名为“Pluggable Database”. And PDB是一个可以独立部署、管理和维护的数据库对象,它是若干个Pluggable Database的容器,每个容器内可以有独…

    database 2023年5月22日
    00
  • MySQL创建用户

    MySQL是一种常用的关系型数据库管理系统,它支持多用户多任务的操作,因此我们需要在MySQL中为每个用户分配不同的权限。 在MySQL中创建用户有两种方式:使用GRANT语句和使用CREATE USER语句。下面我们分别介绍这两种创建用户的方式。 使用GRANT语句创建用户 GRANT语句可以授权给MySQL数据库中的用户不同的权限。下面是通过GRANT语…

    MySQL 2023年3月10日
    00
  • 一文了解MYSQL三大范式和表约束

    一文了解 MYSQL 三大范式和表约束 当我们设计和使用数据库时,通常需要遵守一些规范和限制,以确保数据库的数据结构和数据查询都能够满足我们的需求。MYSQL 三大范式和表约束就是其中的两个关键概念。 什么是 MYSQL 三大范式 MYSQL 三大范式是数据库设计中的一种标准化方法,旨在确保数据库中的数据具有高度的一致性和完整性。这个标准定义了三个级别,每个…

    database 2023年5月19日
    00
  • Redis为什么能抗住10万并发?揭秘性能优越的背后原因

    Redis是一个开源的,基于内存的,高性能的键值型数据库。它支持多种数据结构,包含五种基本类型 String(字符串)、Hash(哈希)、List(列表)、Set(集合)、Zset(有序集合),和三种特殊类型 Geo(地理位置)、HyperLogLog(基数统计)、Bitmaps(位图),可以满足各种应用场景的需求。 1. Redis简介 Redis是一个开…

    Redis 2023年4月14日
    00
  • MySQL InnoDB表空间加密示例详解

    MySQL InnoDB表空间加密示例详解 概述 MySQL提供了两种加密方式:SSL加密和InnoDB表空间加密。本文主要介绍InnoDB表空间加密的使用方法和步骤。 InnoDB表空间加密简介 InnoDB表空间加密是MySQL 5.7.11版本后提供的一种数据加密方式,它可以加密MySQL实例的所有InnoDB表空间,保护数据的机密性和完整性。 Inn…

    database 2023年5月22日
    00
合作推广
合作推广
分享本页
返回顶部