mysql查询什么什么之间的关系,数据表之间关联关系和关联查询

数据表之间关联关系和关联查询

由 学院君 创建于5个月前, 最后更新于 5个月前

版本号 #3

961 views

0 likes

0 collects

关联关系简介

MySQL 之所以被称之为关系型数据库,是因为可以基于外键定义数据表之间的关联关系,日常开发常见的关联关系如下所示:

一对一:一张表的一条记录对应另一张表的一条记录,比如用户表与用户资料表

一对多:一张表的一条记录对应另一张表的多条记录,比如用户表与文章表、文章表与评论表

多对一:一张表的多条记录归属另一张表的一条记录(一对多的逆向操作)

多对多:一张表的多条记录归属另一张表的多条记录,此时仅仅基于两张表的字段已经无法定义这种关联关系,需要借助中间表来定义,比如文章表与标签表往往是这种关联

我们在上篇教程已经介绍了 Go 语言中基于第三方包 go-sql-driver/mysql 对单个数据表的增删改查操作,接下来我们来看看如何基于这个包对关联表进行操作。

新建评论表

为了方便演示,我们在 test_db 数据库中新建一张评论表 comments:

CREATE TABLE `comments` (

`id` bigint unsigned NOT NULL AUTO_INCREMENT,

`content` text COLLATE utf8mb4_unicode_ci,

`author` varchar(30) COLLATE utf8mb4_unicode_ci DEFAULT NULL,

`post_id` bigint unsigned DEFAULT NULL,

PRIMARY KEY (`id`),

FOREIGN KEY fk_post_id(`post_id`) REFERENCES posts(`id`) ON DELETE CASCADE

) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

这里我们创建了一个外键将 comments 表的 post_id 字段和 posts 表的 id 字段关联起来,并且通过 ON DELETE CASCADE 声明将两张表级联起来:当删除 posts 表中的某条记录时,自动删除 comments 中与之关联的评论记录(如果省略这个声明,则不能直接删除 posts 表中有 comments 关联依赖的记录)。

我们在 posts 和 comments 插入两条记录,这两条记录通过 comments.post_id 建立了外键关联:

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
MySQL查询和多表关联是两种不同的查询技术,用于在查询数据时处理复杂的条件和关系。 子查询是指在一个查询中嵌套另一个查询,内部查询的结果会作为外部查询的条件之一。子查询可以在 SELECT、FROM、WHERE 和 HAVING 子句中使用。例如,你可以使用子查询来获取满足某个条件的记录,然后将其用作外部查询的条件或结果集。 下面是一个使用子查询的示例,假设你有两个表:Customers 和 Orders。你想要获取所有在某个城市下单的顾客信息,可以使用子查询来实现: ``` SELECT * FROM Customers WHERE CustomerID IN (SELECT CustomerID FROM Orders WHERE City = 'New York'); ``` 多表关联用于将多个表相关联起来,以便在查询中使用这些表的字段。通过指定连接条件,你可以根据共同的值将多个表连接在一起。常见的多表关联类型包括内连接、左连接、右连接和全连接。 下面是一个使用多表关联的示例,假设你有两个表:Customers 和 Orders。你想要获取所有顾客及其对应的订单信息,可以使用多表关联来实现: ``` SELECT Customers.CustomerName, Orders.OrderID FROM Customers JOIN Orders ON Customers.CustomerID = Orders.CustomerID; ``` 在这个示例中,我们使用了 INNER JOIN 来连接两个表,并通过 Customers.CustomerID 和 Orders.CustomerID 这两个字段进行关联。 总而言之,子查询和多表关联是在 MySQL 中处理复杂查询的强大工具。它们可以根据具体需求选择使用,以实现所需的查询功能。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值