首页 > 数据库 >【数据库】MySQL数据库之约束与多表查询

【数据库】MySQL数据库之约束与多表查询

时间:2025-01-19 20:29:05浏览次数:3  
标签:多表 连接 数据库 community 查询 camera MySQL id SELECT

约束

1.概述

  1. 概念:约束是作用于表中字段上的规则,用于限制存储在表中的数据
  2. 目的:保证数据库中数据的正确性、有效性,完整性和一致性
  3. 分类:

注意:约束是作用于表中字段上的,可以在创建表/修改表的时候添加约束

2.外键约束

  • 概念

外键用来让两张表的数据之间建立连接,从而保证数据的一致性和完整性

  • 语法

添加外键

CREATE TABLE 表名(
字段名 数据类型,
...
[CONSTRAINT] [外键名称] FOREIGN KEY(外键字段名) REFERENCES 主表(主表列名)
);
ALTER TABLE 表名 ADD CONSTRAINT 外键名称 FOREIGN KEY(外键字段名) REFERENCES 主表(主表列名);

删除外键

ALTER TABLE 表名 DROP FOREIGN KEY 外键名称;
  • 删除/更新行为

ALTER TABLE 表名 ADD CONSTRAINT 外键名称 FOREIGN KEY (外键字段) REFERENCES 主表名(主表字段名) ON UPDATE CASCADE ON DELETE CASCADE;

多表查询

1.多表关系

在项目开发中, 各个表结构之间存在三种关系

  • 一对多 (多对一)
  • 多对多
  • 一对一

一对多: 部门和员工

多对多: 学生与课程之间的关系

一对一: 用户与用户详情

2.多表查询概述

笛卡尔积: 集合A 和 集合B 的所有组合情况 (在多表查询时, 需要消除无效的笛卡尔积)

SELECT * FROM emp, dept WHERE emp.dept_id = dept.id;

多表查询分类

  • 连接查询

        内连接: 相当于查询A \ B 交集部分数据

        外连接:

                左外连接: 查询左表所有数据, 以及两张表交集部分数据

                右外连接: 查询右表所有数据, 以及两张表交集部分数据

                自连接: 当前表与自身的连接查询, 自连接必须使用表别名

  • 子查询

3.连接查询

3.1.内连接

内连接查询的时两张表交集的部分

内连接查询语法:

  • 隐式内连接
SELECT 字段列表 FROM 表1, 表2 WHERE 条件 ...;
SELECT ca.camera_id, co.community_name FROM community co, camera ca WHEREca.community_id = co.community_id;
  • 显示内连接
SELECT 字段列表 FROM 表1 [INNER] JOIN 表2 ON 连接条件 ...;
SELECT ca.camera_name, co.community_name FROM community co INNER JOIN camera ca ONca.community_id = co.community_id;

3.2.外连接

  • 左外连接
SELECT 字段列表 FROM 表1 LEFT [OUTER] JOIN 表2 ON 条件 ...;
  • 右外连接
SELECT 字段列表 FROM 表1 RIGHT [OUTER] JOIN 表2 ON 条件 ...;

3.3.自连接

自连接查询可以是内连接查询, 也可以是外连接查询

SELECT 字段列表 FROM 表A 别名A JOIN 表A 别名B ON 条件 ...;

4.联合查询

对于 uniobn 查询, 就是把多次查询的结果合并起来, 形成一个新的查询结果集

多张表的字段类型要保持一致

SELECT 字段列表 FROM 表A ...
UNION [ALL]
SELECT 字段列表 FROM 表B ...;

删掉 ALL 则达到去重的效果

5.子查询

SQL 语句中嵌套 SELECT语句, 称为嵌套查询, 又称子查询

SELECT * FROM t1 WHERE column1 = (SELECT column1 FROM t2);

子查询外部的语句可以是 INSERT / UPDATE / DELETE / SELECT 中的任何一个

根据子查询结果不同, 分为:

  • 标量子查询 (子查询结果为单个值)
  • 列子查询 (子查询结果为一列)
  • 行子查询 (子查询结果为一行)
  • 表子查询 (子查询结果为多行多列)

5.1.标量子查询

标量子查询返回的结果是单个值 (数字 / 字符串 / 日期等), 最简单的形式, 这种子查询称为标量子查询

SELECT * FROM camera WHERE community_id = (SELECT community_id FROM community WHEREcommunity_name = '金达园');

5.2.列子查询

列子查询返回的结果是一列 (可以是多行)

SELECT * FROM camera WHERE community_id in (SELECT community_id FROM community WHEREcommunity_name = '金达园');

5.3.行子查询

行子查询返回的结果是一行 (可以是多列)

SELECT * FROM camera WHERE (community_id, creater) = (SELECT community_id, creater FROM camera WHERE camera_name = '摄像头1')

5.4.表子查询

表子查询返回的结果是多行多列

SELECT * FROM camera WHERE (community_id, creater) in (SELECT community_id, creater FROM camera WHERE camera_name = '摄像头1');

标签:多表,连接,数据库,community,查询,camera,MySQL,id,SELECT
From: https://blog.csdn.net/2302_78914800/article/details/145233651

相关文章

  • Ubuntu 安装Mysql
    使用apt安装MySQL更新系统包在安装MySQL之前,先更新系统的包列表:sudoaptupdate安装MySQL运行以下命令安装MySQL服务器:sudoaptinstallmysql-server启动MySQL服务安装完成后,MySQL服务会自动启动。如果没有启动,可以手动启动:sudosystemctlstartmysql设......
  • 如何修改zblog的数据库连接信息以适应新的主机环境?
    当您需要将zblog迁移到新的主机环境时,必须更新其数据库连接信息,以确保网站能够正常运行。以下是详细的修改步骤和注意事项,帮助您顺利完成这一过程:确定配置文件位置:zblog的数据库配置文件位于zb_users/c_option.php。该文件包含了所有与数据库连接相关的配置项。备份现有配......
  • 如何安全地强制卸载宝塔面板中的数据库?
    在某些情况下,您可能需要在宝塔面板中强制卸载数据库,例如更换数据库版本或清理不再使用的数据库实例。然而,直接卸载可能会遇到一些问题,特别是当数据库存在问题无法启动时。以下是安全且有效的强制卸载方法,同时确保数据安全和系统稳定性:备份数据库:在进行任何操作之前,务必先备份......
  • 请问如何修改zblog的数据库连接信息以适应新的主机环境?
    当您需要将zblog迁移到新的主机或更改数据库配置时,必须更新zblog的数据库连接信息。以下是详细的步骤和注意事项,确保您的博客能够顺利连接到新的数据库。找到配置文件:zblog的数据库配置文件位于zb_users/c_option.php。打开此文件,准备进行编辑。更新数据库连接参数:在c_opt......
  • MySQL 死锁处理
    死锁是指两个或两个以上的事务在执行过程中,因争夺锁资源而造成的一种互相等待的现象。1数据库层面解决死锁的两种方式1、解决死锁的问题最简单的方式是不要有等待,将任何的等待都转化为回滚,并且事务重新开始。 这种没有死锁问题的产生。在线上环境中,可能导致并发性能的下降,甚......
  • Mysql 5.7解决windows本地无法开启服务-1067
    出现原因:我切换mysql8服务后,切换回去mysq5.7,然后报下面的问题。删除后应该可以 但是可能因为我有两个服务,一个5.7,一个8.0然后我继续报错:D:\Monkey\mysql-5.7.33-winx64\bin>netstartMySQL57mysql57服务正在启动.mysql57服务无法启动。服务没有报告任何错误。......
  • 1.MySql基础架构之SQL语句的执行
    1.MySQL数据库的整体架构(i)连接器:连接器负责与客户端建立连接,获取权限、维持和管理连接。连接命令中的mysql是客户端工具,用来建立服务端连接。在完成经典的TCP握手后,连接器就要开始认证你的身份,这个时候用的就是你输入的用户名和密码。​ 如果用户名密码认证通过,连接器会到权限......
  • MySQL数据库笔记——主从复制
    大家好,这里是GoodNote,关注公主号:Goodnote,本文详细介绍MySQL的主从复制,从原理到配置再到同步过程。文章目录简介核心组件主从复制的原理作用主从复制的线程模型主从复制的模式形式复制的方式设计复制机制主从复制的配置步骤优化和改进总结历史文章简介MySQ......
  • MySQL 创建数据库问题:You have an error in your SQL syntax(MySQL 数据库命名规则问题
    问题描述与处理策略1、问题描述CREATEDATABASEmy-shop-db;执行上述SQL语句,报如下错误CREATEDATABASEmy-shop-db>1064-YouhaveanerrorinyourSQLsyntax;checkthemanualthatcorrespondstoyourMySQLserverversionfortherightsyntaxtouse......
  • 安全认证框架【springSecurity】进行数据库效验开箱即用。
    流程:注册---加密密码---保存数据库---登录---授权---认证---效验数据库账号密码---生成token存redis---返回前端第一步子模块引入依赖;版本号由父统一管理,这里有不理解的可以看我maven篇巩固一下。<?xmlversion="1.0"encoding="UTF-8"?><projectxmlns="http://maven.apac......