[Mysql] Mysql的多表查询----多表关系(上)

news/2024/11/16 18:40:31 标签: mysql, 数据库

1、介绍

在实际开发中,一个项目通常需要很多张表才能完成。例如:一个商城项目就需要分类表、商品表、订单表等多张表。且这些表的数据之间存在一定的关系。

2、多表关系

Mysql多表之间的关系可以概括为:一对一、一对多/多对一、多对多关系。

(1)一对一关系

例如:一个学生只有一张身份证;一张身份证只能对应一个学生。

(2)一对多/多对一关系

例如:一个 部门有多个员工(一对多关系),多个员工对应一个部门(多对一关系)。

(3)多对多关系

例如:一个学生可以选择很多门课程,一个课程可以被很多学生选择。

多对多关系实现需要借助第三张中间表。中间表至少包含两个字段,将多对多关系拆成一对多的关系。

3、外键约束

(1)介绍

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

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

比如:一个水果摊,只有苹果、桃子、李子、西瓜等4中水果,那么你来到水果摊要买水果就只能选择苹果、桃子、李子和西瓜。其它的水果都是不能购买的。

(2)特点

1))主表必须已经存在于数据库中,或者是当前正在创建的表。

2))必须为主表定义主键

3))主键不能包含空值,但允许在外键中出现空值,也就是说,只要外键的每个非空值出现在指定的外键中,这个外键的内容就是对的。

4))在主表的表名后面指定列名或列名的组合。这个列或列的组合必须是主表的主键或候选键。

5))外键中列的数目必须和主表的主键中列的数目相同(意思是:若主键列是单列主键,则外键列也必须是单列的。若主键列是联合主键则外键列也必须是联合的)。

6))外键中列的数据类型必须和主表主键中对应列的数据类型相同。

4、操作

(1)操作---创建外键约束

方式一:在创建表时设置外键约束

在create table  语句中,通过foreign   key  关键字来指定外键,具体的语法格式如下:

[constraint   <外键名>]   foreign   key   (字段名   [,   字段名2,...])    references  <主表名>  (主键列1,[ ,主键列2,...]);

注意:[ ...]  代表可以省略。

示例:

创建主表:

创建子表:


http://www.niftyadmin.cn/n/5754516.html

相关文章

智慧农业的前世今生

智慧农业是将现代信息技术与传统农业相结合的新型农业生产方式&#xff0c;其发展历程如下&#xff1a; 20世纪70年代末&#xff0c;以美国为代表的欧美国家率先开始农业信息化、智能化的应用研究&#xff0c;以农业专家系统为代表的农业信息化应用开始在农业生产领域萌芽。我…

JVM回收机制与算法

jvm基本结构 JVM&#xff08;Java虚拟机&#xff09;是Java程序可以跨平台运行的关键。它负责将Java字节码转换为特定平台的机器码&#xff0c;使Java程序能够在不同的硬件和操作系统上运行而无需重新编译。JVM的基本结构主要包括以下几个核心部分&#xff1a; ‌类加载器&…

鸿蒙 管理应用拥有的状态有Localstorage、Appstorage、PersistentStorage、Environment、用户首选项、持久化方案。

LocalStorage&#xff1a; LocalStorage是页面级UI状态存储&#xff0c;通过Entry装饰器接收的参数可以在页面内共享同一个LocalStorage实例。支持UIAbility实例内多个页面间状态共享。 // 存储数据 localStorage.setItem(key, value); // 获取数据 const value localStorage…

分享一些Kafka集群优化的最佳实践?

以下是一些 Kafka 集群优化的最佳实践&#xff1a; 复制策略配置&#xff1a; 在 server.properties 文件中配置 default.replication.factor 来指定每个主题的默认副本因子&#xff0c;以及 min.insync.replicas 来配置每个分区中必须要保持同步的最小副本数。这可以提高 Kafk…

nginx反向代理上游服务器主从配置

nginx.conf中可以将location反向代理到一个或多个上游服务器处理&#xff0c;其中多个上游服务器可以配置成一个上游服务器组&#xff0c;并定义相应的NLB策略来相应请求&#xff0c;比如默认的轮询、最少连接数、IP哈希、权重等。 我们考虑另外一种主从的场景&#xff0c;只要…

Gin 框架中的路由

1、路由概述 路由&#xff08;Routing&#xff09;是由一个 URI&#xff08;或者叫路径&#xff09;和一个特定的 HTTP 方法&#xff08;GET、POST 等&#xff09; 组成的&#xff0c;涉及到应用如何响应客户端对某个网站节点的访问。 RESTful API 是目前比较成熟的一套互联网应…

redis序列化数据查询

可以看到是HashMap&#xff0c;那么是序列化的数据 那么我们来获得反序列化数据 import java.io.ByteArrayInputStream; import java.io.IOException; import java.io.ObjectInputStream; import redis.clients.jedis.Jedis;public class RedisDeserializeDemo {public static…

【数据结构】【线性表】静态链表(附C语言源码)

静态链表 链表是物理结构为链式的线性表&#xff0c;其每个结点的存储位置不一定是连续的&#xff0c;每个结点依靠结点元素的中的指针线性相连。但有时候为了方便管理内存空间&#xff0c;会将链表的各个结点存储空间放在一块&#xff0c;其实现方式类似于数组&#xff0c;只…