广告
广告
广告
前言在实际开发中,数据库经常会遇到需要将多个表的数据合并到一起进行统一查询和展示的需求。此时,MySQL提供了UNION操作符来实现多表合并查询。本文将介绍UNION的使用场景、基本语法、注意事项,并通过案例和示例代码进行说明。一、什么情况下会用到多表合并(UNION)多个结构相同或相似的表,需要将它们的数据合并展示。例如:不同地区的订单表、历史与当前数据分表等。需要将不同查询结果合并成一个结果集进行统一处理或统计。某些业务场景下,数据分散在多个表中,但需要一次性查询出来。二、UNION的基本用法UNION用于合并两个或多个SELECT语句的结果集。其基本语法如下:SELECT colu...
前言在实际业务场景中,常常会遇到多对多(Many-to-Many, M:N)关系。例如:学生和课程,一个学生可以选多门课程,一门课程也可以被多个学生选修。MySQL等关系型数据库并不直接支持多对多关系,需要通过“中间表”来实现。一、基本原理多对多关系通常通过三张表实现:主表A(如学生表)主表B(如课程表)关联表(如选课表),用于存储A和B的对应关系1. 表结构示例假设有学生(students)、课程(courses)、选课(student_courses)三张表:CREATE TABLE students ( id INT PRIMARY KEY AUTO_INCREMENT, ...
一、什么是自链接?自链接(Self Join)是指在一条 SQL 语句中多次引用同一张表,通过给表设置不同的别名,将其视为多张表进行连接查询。自链接本质上是内连接或外连接,只不过连接的对象都是同一张表。二、什么情况下会用到自链接?当表中数据存在层级关系(如员工与上级、分类与父分类等),需要在同一表内查找相关联的数据时。需要对同一表中的不同记录进行比较或关联时。解决无法通过单表直接查询出父子、上下级等关系的问题。三、自链接解决了什么问题?自链接确实主要解决了表内数据之间的关联查询问题,尤其适用于层级结构的数据(如员工与上级、分类与父分类等)。 在你的例子中,员工表中每个员工有一个上级ID字...
一、什么是多表查询在实际的数据库应用中,数据往往分布在多个表中。多表查询指的是在 SQL 查询中同时涉及两个或两个以上的表,通过一定的关联条件将这些表的数据组合起来,从而获取更全面的信息。例如,订单表与客户表、商品表之间的联合查询。二、如何进行多表查询MySQL 支持多种多表查询方式,主要包括:1. 内连接(INNER JOIN)只返回两个表中满足连接条件的记录。SELECT a.*, b.* FROM table_a a INNER JOIN table_b b ON a.id = b.a_id;2. 左连接(LEFT JOIN)返回左表的所有记录,以及右表中满足连接条件的记录,右表没...
前言在日常的数据分析和报表开发中,分组统计是非常常见的需求。MySQL 提供了 GROUP BY 语句用于分组统计,而 HAVING 子句则用于分组后的筛选。本文将详细讲解如何在 MySQL 中使用分组、分组的适用场景、实际案例与代码示例,并介绍分组查询如何显示其他字段以及分组后再进行筛选的方法。一、为什么要使用分组统计?当我们需要对某一字段的不同取值进行分类汇总时,就需要用到分组统计。例如,统计每个部门的员工人数、每个商品的销售总额等。二、GROUP BY 的基本用法GROUP BY 用于将查询结果按照一个或多个字段进行分组,通常与聚合函数(如 COUNT、SUM、AVG、MAX、MI...
前言在实际开发中,数据表中经常会出现重复的数据。为了保证数据的准确性和简洁性,我们常常需要对查询结果进行去重操作。MySQL为我们提供了DISTINCT关键字,帮助我们轻松实现数据去重。一、DISTINCT的基本用法DISTINCT用于SELECT语句中,可以去除查询结果中的重复记录。其基本语法如下:SELECT DISTINCT 列名1, 列名2, ... FROM 表名 WHERE 条件;如果只对一个字段去重,则只需写一个字段名。如果对多个字段去重,则只有所有字段值都相同时才会被视为重复。示例1:单字段去重假设有如下用户表users:idnamecity1张三北京2李四上海3王五北京...
前言在MySQL数据库中,SUM 和 AVG 是最常用的聚合函数之一,分别用于对某一列进行求和和求平均值。它们常用于数据统计、报表分析等场景。本文将详细介绍这两个函数的用法,并提供常见案例和示例代码。一、SUM函数——求和1. 基本语法SELECT SUM(列名) FROM 表名 WHERE 条件;2. 示例假设有一个员工表 employees,结构如下:idnamesalary1张三50002李四70003王五6000计算所有员工的工资总和SELECT SUM(salary) AS total_salary FROM employees;结果:total_salary18000按部门统...
起因在MySQL的SQL查询中,GROUP BY语句用于将结果集按照一个或多个列进行分组。早期MySQL版本对GROUP BY的实现较为宽松,允许在SELECT列表中出现未包含在GROUP BY子句中的列,且这些列的值未必唯一或确定。这种宽松的行为可能导致查询结果不可预测,尤其是在分布式或高并发环境下,容易引发数据一致性问题。为了解决这一隐患,MySQL引入了ONLY_FULL_GROUP_BY SQL模式。该模式要求SELECT列表、HAVING、ORDER BY等子句中出现的所有列,要么是GROUP BY子句中的分组列,要么是聚合函数的结果。这样可以保证查询结果的确定性和一致性。适用...
前言在MySQL数据库中,MIN和MAX是两种常用的聚合函数,分别用于获取某一列的最小值和最大值。它们在数据分析、报表统计、业务查询等场景中非常常见。一、MIN和MAX的基本用法MIN(column):返回指定列的最小值。MAX(column):返回指定列的最大值。示例假设有如下员工表employees:idnamesalary1张三80002李四120003王五10000查询最高和最低工资SELECT MIN(salary) AS min_salary, MAX(salary) AS max_salary FROM employees;结果:min_salarymax_salary80...
前言在MySQL数据库中,COUNT函数是最常用的聚合函数之一,主要用于统计表中记录的数量。无论是数据分析、报表统计还是日常开发,COUNT都扮演着不可或缺的角色。1. COUNT函数的基本用法COUNT函数有多种用法,常见的有以下几种:COUNT(*):统计表中所有行的数量(包括NULL值)。COUNT(列名):统计指定列中非NULL值的数量。COUNT(DISTINCT 列名):统计指定列中不同(去重)且非NULL值的数量。示例假设有如下用户表users:idnameemail1张三zhangsan@xx.com2李四NULL3王五wangwu@xx.com1.1 统计总行数SELE...
前言在 MySQL 数据库中,排序是一项非常常见且重要的操作。通过排序,我们可以按照指定的字段对查询结果进行升序或降序排列,从而更方便地分析和展示数据。1. 基本排序用法MySQL 提供了 ORDER BY 语句用于对查询结果进行排序。其基本语法如下:SELECT 字段1, 字段2, ... FROM 表名 ORDER BY 排序字段 [ASC|DESC];ASC:升序排列(默认)DESC:降序排列示例:按年龄升序排列假设 users 表数据如下:idnameage1张三252李四223王五284赵六22SQL 语句:SELECT id, name, age FROM users ORD...
前言MySQL 在日期和时间处理方面提供了丰富的函数和灵活的用法。1. 时间处理函数有哪些?案例与代码示例函数名作用说明示例代码及结果NOW()返回当前日期和时间SELECT NOW(); → 2024-06-01 15:30:00CURDATE()返回当前日期SELECT CURDATE(); → 2024-06-01CURTIME()返回当前时间SELECT CURTIME(); → 15:30:00DATE()提取日期部分SELECT DATE('2024-06-01 15:30:00'); → 2024-06-01TIME()提取时间部分SELECT TIME('2024-06-...
前言MySQL 中的日期和时间类型用于存储日期、时间或两者的组合。合理选择和使用这些类型对于数据的准确性和高效性至关重要。本文将介绍 MySQL 支持的主要日期类型、它们的区别、使用场景、格式化方法,以及重点讲解 TIMESTAMP 与 DATETIME 的区别。MySQL 日期类型一览类型说明DATE仅存储日期(YYYY-MM-DD),不含时间部分TIME仅存储时间(HH:MM:SS),不含日期部分YEAR存储年份(YYYY 或 YY),范围为 1901-2155 或 70-69DATETIME存储日期和时间(YYYY-MM-DD HH:MM:SS),无时区信息TIMESTAMP存储日...
前言MySQL中的SET类型是一种非常实用的数据类型,允许在单个字段中存储多个预定义的选项。它适用于需要在一列中保存多个状态、标签或权限等多选项场景。本文将详细介绍SET类型的用法、相关案例、代码示例,并重点讲解如何利用二进制进行模糊匹配及其底层原理。一、SET类型简介SET类型本质上是一个字符串对象,可以包含0个或多个值,每个值必须从事先定义好的集合中选择。每个SET列最多可以有64个不同的成员。语法示例CREATE TABLE user_tags ( id INT PRIMARY KEY AUTO_INCREMENT, tags SET('sports...
前言在MySQL数据库中,ENUM(枚举)类型是一种特殊的数据类型,用于存储一组预定义的字符串值。它非常适合用于性别、状态、类别等固定选项的数据场景。1. 什么是ENUM类型?ENUM类型允许你为某个字段定义一组可选值,插入数据时只能选择这些值之一。这样可以保证数据的规范性和一致性,防止出现拼写错误或非法数据。2. 创建带有ENUM字段的表假设我们要创建一个用户表(user),其中性别字段(gender)只有“男”、“女”、“保密”三种取值:CREATE TABLE user ( id INT PRIMARY KEY AUTO_INCREMENT, name VARCHA...
前言在MySQL中,数值类型用于存储各种数字数据。合理选择和使用数值类型对于数据的准确性、存储效率和后续运算都至关重要。本文将详细介绍MySQL中的数值类型。1. 数值类型总览MySQL的数值类型主要分为两大类:整数类型和小数类型(包括浮点数和定点数)。下表总结了常用的数值类型及其特点:类型字节数有符号范围无符号范围说明TINYINT1-128 ~ 1270 ~ 255极小整数SMALLINT2-32768 ~ 327670 ~ 65535小整数MEDIUMINT3-8388608 ~ 83886070 ~ 16777215中等整数INT/INTEGER4-2147483648 ~ 21...
前言在 MySQL 数据库中,正则表达式(Regular Expression,简称 regex)是一种强大的文本匹配工具,可以帮助我们在查询数据时实现灵活的字符串筛选。本文将介绍 MySQL 中正则表达式的基本用法和常见语法,适合新手入门。一、正则表达式的应用场景模糊查询 :比 LIKE 更灵活,可以匹配复杂的字符串模式。数据清洗 :查找或过滤出符合特定格式的数据,如手机号、邮箱等。批量替换 :配合 REGEXP_REPLACE (MySQL 8.0+)进行字符串替换。二、MySQL 中正则表达式的基本用法MySQL 提供了 REGEXP 或 RLIKE 操作符用于正则匹配。例如:SE...
字符集MySQL 常用的字符集主要有两种:utf8 (又称为 utf8mb3 )utf8mb4早期 MySQL 的 utf8 实际上是 utf8mb3 ,它最多只支持每个字符 3 个字节,无法存储部分特殊字符(如 emoji 表情等需要 4 字节的字符)。因此,推荐直接使用 utf8mb4 ,它完全兼容 utf8 ,并且支持所有 Unicode 字符,包括 emoji 和部分生僻汉字。 现在新项目建议无脑使用 utf8mb4 ,避免后续字符集兼容性问题。排序规则(Collation)如果使用 utf8mb4 ,常用的排序规则有:utf8mb4_unicode_ci :基于 Unicode...
前言最近升级了Prisma依赖后,它会在生成客户端时打印这么一句话:Warning: You did not specify an output path for your `generator` in schema.prisma. This behavior is deprecated and will no longer be supported in Prisma 7.0.0.✔ Generated Prisma Client (v6.6.0) to .\node_modules\.pnpm\@prisma+client@6.6.0_prisma_66ad65b8aa48c66bb...
数据类型类型大小用途与特性示例CHAR0-255字节定长字符串,适合存储固定长度数据,如账号密码。VARCHAR0-65535字节变长字符串,适合存储长度不定的数据,例如用户名、邮件地址。TINYBLOB0-255字节小型二进制数据,适合存储小格式图片或图标。TINYTEXT0-255字节短文本字符串,适合存储简短消息或注释。BLOB0-65535字节中等大小二进制数据,适合存储文档或媒体文件。TEXT0-65535字节长文本数据,适合存储博客文章内容、产品描述。MEDIUMBLOB0-16777215字节中等长度二进制数据,适合存储高分辨率图像。MEDIUMTEXT0-16777215...
前言乘着年底没什么事,把axios和axios-retry的源码简单看了下,总结了下一些最佳实践。axios本身axios有个很便捷的使用方式,就是它既可以作为函数发起请求:axios(),也能通过它身上的属性,如:get、post、delete等来发起对应请求,也可以通过axios.request()来发起更加灵活配置请求,甚至还能通过axios.create()来创建自定义配置的请求实例。为什么它能有这么多请求方式?其实就是axios本身就是axios.request这个方法的bind返回值,当我们import引入这个axios的时候,引入的是request函数。import axi...
前言之前写了一篇 Github Actions 怎么将build的内容发布到 Releases 上,这次想将前端的SPA项目搞一个在线预览的站点,但是又没有经济实力提供一个服务器来进行部署,所以就参考了下一些开源项目,发现他们都是用 Github Pages 来做在线预览的,所以我也想弄一个。本篇文章就不细说基本内容了,想入门的可以看之前那篇:《使用Github Actions打包前端项目并自动上传到Releases》教程我本来的意思是,先用 Actions 打包后,再克隆一个仓库,切换到 Github Pages 的分支,将dsit目录里的内容复制到这个 Github Pages 的...
前言最近在写AI训练器的UI界面,有一个需求就是展示TOML配置,为此就需要用到代码高亮,我之前用过 highlight.js 和 PrismJS,但是在撰写VitePress项目配置时发现了一个新的代码高亮库:shiki。shiki可以省去维护css和html,并且原生就是ESM按需加载,支持多种主题等,已经满足了我对一个代码高亮的需求,为此我去尝试用了下这个,于是有了本篇文章。插件文档:Shiki语法高亮器github:shiki注意事项shiki是按需加载的,它的实现方式就是除了一个主体的js文件,在打包后会有非常多的不同代码语言的解析器脚本文件,但是不用担心,这些脚本文件只有在真...
前言最近终于将常用的设备都替换成了2.5g网口了,为了就是希望局域网看电影的时候,拖拽视频进度条能少卡顿一点,但是发现一个很蛋疼的问题,明明wifi已经是wifi6的极致了,2400mbps了,换算成文件大小怎么也可以300m每秒的文件,但是在内网传输文件的时候发现速度只有10mb,贼难受,想要测试一下速度,发现不知道怎么弄。为此写一篇文章留给有需要的人,也方便自己以后使用。首先我的路由器是ikuai爱快,或者你的路由器支持iperf3这个功能,那么也能照着这个教程来测试内网速度。教程首先我们开启爱快的内网测试功能,如果是支持iperf3的路由器,自行去开启这个功能。找到:应用工具 --...
前言前端的复制功能第一次使用的时候还记忆犹新,那时根本不知道怎么操作,复制它到底是怎么实现的,该怎么去触发,百度查看了不知道多少所谓的复制功能文档,每篇都有不一样的用法,我总想着有一天能搞清楚这些,毕竟现在复制功能已经web功能开发中离不开了。execCommand API浏览器在document对象上暴露了execCommand方法,该方法允许使用者通过输入“命令”的方式来操作 可编辑内容区域 的元素。可编辑内容区域被官方认为是contenteditable="true"的html元素,但按道理,input这些应该也是算可编辑内容区域的。这些都不重要,我们这次关注的...
最近评论