当前位置: 首页 > news >正文

DataBase【MySQL基础夯实使用说明(下)】

MySQL数据库

🏆当领导表示关心时,您怎么回复?
⚠️不要傻傻的说应该的,这样不仅会抹杀掉你的辛苦,也让领导没办法接话!
🔔文章末尾彩蛋!


文章目录

  • MySQL数据库
  • 前言
  • 一、约束
    • 1.1.外键约束
      • 1.1.1. 外键约束删除/更新行为
  • 二、多表查询
    • 2.1.多表关系
    • 2.2.多表查询分类
      • 2.2.1.消除笛卡尔积集
      • 2.2.2.连接查询
        • 2.2.2.1.内连接
        • 2.2.2.2.外连接
          • 2.2.2.2.1.左外连接
          • 2.2.2.2.2.右外连接
      • 2.2.3.自连接
      • 2.2.4.联合查询【union】【union all】
      • 2.2.5.子查询
  • 彩蛋


前言

在信息技术飞速发展的当下,数据的价值日益凸显,如同深埋地下的宝藏,等待着被挖掘和利用。而数据库管理系统,就像是开启这座宝藏的钥匙,其中 MySQL 更是这把钥匙中的佼佼者。它凭借自身独特的优势,在开源数据库领域中占据着举足轻重的地位,广泛应用于从个人网站到大型企业级应用的各个角落。本文将深入剖析 MySQL,从它的诞生背景、核心特性,到存储引擎的奥秘,以及丰富多样的应用场景,带你全方位认识这款备受瞩目的数据库管理系统,探寻它在数据管理世界中长盛不衰的秘诀。


提示:以下是本篇文章正文内容,下面案例仅供学习参考:

一、约束

约束是作用于表中字段上的规则,用于限制存储在表中的数据。以此来保证数据库中数据的正确、有效性和完整性。

约束描述关键字
非空约束限制该字段的数据不能为nulNOT NULL
唯一约束保证该字段的所有数据都是唯一、不重复的UNIQUE
主键约束主键是一行数据的唯一标识,要求非空且唯一PRIMARY KEY
默认约束保存数据时,如果未指定该字段的值,则采用默认值DEFAULT
外键约束用来让两张表的数据之间建立连接,保证数据的一致性和完整性FOREIGN KEY
检查约束保证字段值满足某一个条件CHECK

⭐️约束是作用在表字段上的,可以在创建数据库或修改表的时候添加约束!

1.1.外键约束

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

语法:

-- 建表时添加外键
CREATE TABLE 表名(字段名 字段类型,...[CONSTRAINT] [外键名称] FOREIGN KEY(外键字段名) REFERENCES 主表(主表列名)
);
-- 建表后添加外键
ALTER TABLE 表名 ADD CONSTRAINT 外键名称 FOREIGN KEY(外键字段名) REFERENCES 主表(主表列名);
-- 删除外键
ALTER TABLE 表名 DROP FOREIGN KEY 外键名称;

1.1.1. 外键约束删除/更新行为

行为说明
NO ACTION当在父表中删除/更新对应记录时,首先检查该记录是否有对应外键,如果有则不允许删除/更新。(与 RESTRICT一致)
RESTRICT当在父表中删除/更新对应记录时,首先检查该记录是否有对应外键,如果有则不允许删除/更新。(与 NO ACTION 一致)
CASCADE当在父表中删除/更新对应记录时,首先检查该记录是否有对应外键,如果有,则也删除/更新外键在子表中的记录。
SET NULL当在父表中删除对应记录时,首先检查该记录是否有对应外键,如果有则设置子表中该外键值为nul(这就要求该外键允许取null)
SET DEFAULT父表有变更时,子表将外键列设置成一个默认的值(Innodb不支持)

语法:

-- 用于外键的删除和更新
ALTER TABLE 表名 
ADD CONSTRAINT 外键名称 
FOREIGN KEY (外键字段) 
REFERENCES 主表名(主表字段名) 
ON UPDATE CASCADE 
ON DELETE CASCADE;
  • ON UPDATE CASCADE 是一种级联更新操作。当主表中被关联的字段(主表字段名)的值发生更新时,当前表中对应的外键字段的值也会自动进行相同的更新。这样可以确保两个表之间的数据一致性。
  • ON DELETE CASCADE 是一种级联删除操作。当主表中的某条记录被删除时,当前表中所有外键字段值与该记录主表字段值匹配的记录也会被自动删除。同样,这也是为了保证数据的一致性和完整性。

二、多表查询

在 SQL 里,多表查询指的是从两个或多个表中提取数据的操作。当数据分散存储在不同表中,而你又需要将这些数据关联起来进行分析时,就会用到多表查询。同时也是为了避免数据冗余、以此来提高数据的存储效率和可维护性!

2.1.多表关系

在进行数据库表结构设计时,会根据业务需求及业务模块之间的关系,分析并设计表结构,由于业务之间相互关联,所以各个表结构之间也存在着各种联系,基本上分为三种:

关系如何实现
一对一在任意一方加入外键,关联另外一方的主键,并且设置外键为唯一的(UNIQUE)
一对多(多对一)在多的一方设立外键,指向一方的主键
多对多建立第三张中间表,中间表至少包含两个外键,分别关联两方主键

2.2.多表查询分类

2.2.1.消除笛卡尔积集

-- 笛卡尔积【笛卡尔积是指两个集合中所有可能的元素组合。对于数据库表来说,就是将第一个表的每一行与第二个表的每一行进行组合,最终生成的结果集行数为两个表行数的乘积。】
-- 在多表查询时,需要消除无效的笛卡尔积!
SELECT [字段] FROM 表名1,表名2 WHERE 表名1.字段 = 表名2.字段;

2.2.2.连接查询

2.2.2.1.内连接

相当于两张表的交集数据!

隐式内连接语法:

SELECT 字段列表 FROM1,2 WHERE 条件...;

显式内连接语法:

SELECT 字段列表 FROM1 INNER JOIN2 ON 连接条件;

2.2.2.2.外连接
2.2.2.2.1.左外连接

查询左表的所有数据,以及两张表交集的部分!

左外连接语法:

SELECT 字段列表 FROM1 LEFT [OUTER] JOIN2 ON 条件;
2.2.2.2.2.右外连接

查询右表的所有数据,以及两张表交集的部分!

右外连接语法:

SELECT 字段列表 FROM1 RIGHT [OUTER] JOIN2 ON 条件;

2.2.3.自连接

当前表与自身的连接查询,其可以是内连接,也可以是外连接!自连接必须使用表别名!

自连接语法:

SELECT 字段列表 FROM1 别名1 JOIN1 别名2 ON 条件;

2.2.4.联合查询【union】【union all】

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

  • union all:直接将符合条件的数据显示出来,不会进行去重!
  • union:将符合条件的数据显示出来并进行去重!

语法:

SELECT 字段列表 FROM1
UNION [ALL]
SELECT 字段列表 FROM2 ...;

⚠️对于联合查询的多张表的列数必须保持一致,字段类型也需要保持一致!


2.2.5.子查询

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

语法:

SELECT 字段列表 FROM1
WHERE column =(
SELECT column FROM2
);

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

子查询结果分类:

  • 标量子查询(子查询结果为单个值,常用的操作符:= <>、>、>=、<、<=)
  • 列子查询(子查询结果为一列,常用的操作符:IN、NOT IN、ANY、SOME、ALL)
操作符描述
IN在指定的集合范围之内,多选一
NOT IN不在指定的集合范围之内
ANY子查询返回列表中,有任意一个满足即可
SOME与ANY等同,使用SOME的地方都可以使用ANY
ALL子查询返回列表的所有值都必须满足
  • 行子查询(子查询结果为一行,常用的操作符:=、<>、IN、NOTIN)
  • 表子查询(子查询结果为多行多列,常用的操作符:IN)

⭐️根据子查询位置,分为:WHERE之后、FROM之后、SELECT之后!


彩蛋

👑谢谢领导的关心,这段时间虽然大家都挺忙的,但只要项目成功这些都是值得的!


http://www.mrgr.cn/news/90582.html

相关文章:

  • 3.3 学习UVM中的uvm_driver 类分为几步?
  • Unity中快速制作2D动画:技巧编
  • Redis数据库(二):Redis 常用的五种数据结构
  • langchain学习笔记之小样本提示词Few-shot Prompt Template
  • 计算机毕业设计——Springboot的社区维修平台旅游管理
  • 第二天:工具的使用
  • 浏览器网络请求全流程深度解析
  • Llama_Index核心组件介绍
  • 【设计模式】【行为型模式】状态模式(State)
  • Redis7.0八种数据结构底层原理
  • Spring Boot + ShardingSphere 踩坑记
  • 前缀树算法篇:前缀信息的巧妙获取
  • 动态规划LeetCode-416.分割等和子集
  • 动态规划LeetCode-1049.最后一块石头的重量Ⅱ
  • 计算机网络和操作系统常见面试题目(带脑图,做了延伸以防面试官深入提问)
  • 小白零基础如何搭建CNN
  • UGUI Canvas为Overlay模式下的UI元素的position和localPosition
  • 【Matlab算法】基于人工势场的多机器人协同运动与避障算法研究(附MATLAB完整代码)
  • C++病毒(^_^|)(2)
  • 变化检测相关论文可读list
  • 位运算算法篇:异或运算
  • 2、k8s 二进制安装(详细)
  • Ubuntu 22.04 - OpenLDAP安装使用(服务器+LAM+客户端)
  • Golang学习历程【第七篇 闭包type defer panic recover了解time包】
  • 【Unity3D】Jenkins Pipeline流水线自动构建Apk
  • Java 大视界 -- 区块链赋能 Java 大数据:数据可信与价值流转(84)