数据库--SQL
SQL:Structured Query Language,结构化查询语言
SQL是用于管理关系型数据库并对其中的数据进行一系列操作(包括数据插入、查询、修改删除)的一种语言
分类:数据定义语言DDL、数据操纵语言DML、数据控制语言DCL、事务处理、存储过程和函数、触发器
一. SQL数据定义语言
DDL包含创建、修改、删除表的语句,创建、修改、删除索引的语句,创建、修改、删除视图的语句。
创建 | 修改 | 删除 | |
表 | create table | alter table | drop table |
索引 | create index | alter index | drop index |
视图 | create view | alter view | drop view |
1 创建表
create table <表名>{<列名1> <数据类型> [列级完整性约束],<列名2> <数据类型> [列级完整性约束],[表级完整性约束]
};
1.1 表的数据类型
数据类型 | 描述 | |
文本型 | char(n) | 长度为n的定长字符串 |
varchar(n) | 长度为n的变长字符串 | |
数字型 | int | 整数(4字节) |
smallint | 短整数(2字节) | |
bigint | 大整数(8字节) | |
float | 单精度浮点数 | |
double | 双精度浮点数 | |
decimal(p,d) | 定点数,由p位数字组成,小数点后有d位数字 | |
boolean | 布尔型 | |
时间型 | date | 日期,包含年、月、日,格式为YYYY-MM-DD |
time | 时间,包含时、分、秒,格式为HH:MM:SS | |
timestamp | 时间戳,格式为YYYY-MM--DD HH:MM:SS |
1.2 完整性约束
非空约束(not null):指定某列不可为空
唯一约束(unique):指定某列不能重复
主键约束(primary key):指定某列位主键,主键属性必须是非空且唯一的
外键约束(foreign key ... references):指定某列为外键,同时需指定外键引用其他表的主键(可以与本表的每个主键,进行外键约束)
1.3 修改表
添加列:
alter table <表名> add [column] <列名> <数据类型>;
删除列:
alter table <表名> drop [column] [restrict | cascade];
restrict:如果该列被其他列引用,则无法删除该列
cascade:引用该列的其他列会和该列同时删除
修改列:
alter table <表名> alter column <列名> <数据类型>;
1.4 删除表
drop table <表名> add [restrict|cascade];
注:drop table不仅删除表中的所有元组,还删除了该表的关系模式
2 创建索引
为了提高查询速率,可以在一个表上建立一个或者多个索引,以加速查询。
create [unique] [cluster] index <索引名>
on <表名> (<列名> [<次序>], <列名> [<次序>]);
含义:在on字句中指定的一列或者多列上建立索引,还可以指定某列索引值的排列次序
次序:ASC(升序)、DESC(降序)
unique:此索引的值必须唯一
cluster:此索引是聚集/聚簇索引
2.1 修改、删除索引
修改:
alter index <旧索引名> rename to <新索引名>;
删除:
drop index <索引名>;
3 创建视图
视图是数据库中的一个查询的查询结果构成的“虚关系”。
将重复执行的SQL查询存储在数据库中,并对其进行命名,在之后的查询中可通过名字进行查询,可以减少重复工作。
一个视图就是一个命名的存储在数据库中的查询,视图中的数据即为该查询对应的查询结果
create view <视图名> [(<列名1>,<列名2>)] as <子查询>;
子查询:任何select语句
在执行create view语句时并不执行其中的子查询语句,只是把视图的定义存入数据字典。
select * from <视图名> where 条件;
3.1 修改视图
alter view <视图名> as <子查询>;
3.2 删除视图
drop view <视图名> [cascade];
该语句将把指定的视图定义从数据字典中删除
cascade:该视图和由该视图导出的视图都会被删除
3.3 物化视图
视图是一种“虚关系”,实际查询时需要根据定义查询底层关系,当存在大量这样的查询时会有较高的成本。
某些数据库支持物化视图,像存储表一样将创建的视图关系,“物化”存储在数据库中。
物化视图的创建、修改与删除语法同视图类似,区别是多列关键字materialized
create materialized view <物化视图名> [(<列名1>,<列名2>)] as <子查询>;
二.SQL数据操纵语言
DML包括数据的查询、插入、删除和修改
1 数据查询
数据查询是从数据库中获取满足一定条件的数据,是数据库的核心操作。利用SQL进行数据查询的基本语法为:
select [all | distinct] <列表达式>
from <表名或视图名>
where 条件
group by <列名1>,<列名2>
having 条件
order by <列表达式> [<次序>];
select子句:指定要显示的属性列
from子句:指定从哪些表或者视图中查询数据
where子句:筛选满足条件的元组
group by子句:指定按照哪些列对元组进行分组
having子句:对分组结果进行筛选
order by子句:将查询结果按照指定顺序进行排序
1.1 选择和投影
选择操作可以选择表中的若干元组,通过where子句实现
投影操作可以选择表中的若干列,通过select子句实现
1.2 投影操作
投影操作可以选择表中的若干列,主要体现在select子句后面的列表达式
查询指定列:select句子中依次列出要查找列的名字
查询全部列:用*号替代所有列
查询经过计算的值:对列进行计算后的表达式
用户可以通过AS指定列别名来改变查询结果的列标题
select <列名> as <别名> from <表名或视图名>;
1.3 选择操作
选择操作通过where子句选择若干满足条件的元组
where子句后面跟着一个条件表达式,满足该条件表达式的元组会被返回
查询条件 | 谓词 |
比较 | = , > , < , >= , <= , != , <> , !> , !< , Not+上述比较符号 |
确定范围 | between and, not between and |
确定集合 | in, not in |
空值 | is null, is not null |
逻辑运算 | and, or |
字符串运算 | like, not like, _ , % , escape |
like可以用来查询与匹配串匹配的字符串。其语法格式为:
[not] like "<匹配串>" [escape "<转码字符>"];
匹配串一般由字符和通配符( _ 或者 %)组成
_:表示匹配任意一个字符
%:表示匹配任意多个字符
当字符串的所有字符均可匹配成功时,该字符串的like查询结果为真
当匹配串本身就包含通配符时,需要在匹配串中包含的通配符前加上转义字符来纪念性转移,同时需要使用escape "<转码字符>" 来指定转码字符
1.4 聚集操作
为了查询一些数据聚集之后的结果,需要使用聚集函数。常见的聚集函数有:
聚集函数 | 含义 |
count([distinct | all *]) | 统计元组个数 |
count([distinct | all] <列名>) | 统计一列值的个数 |
sum([distinct | all] <列名>) | 统计一列值的总和 |
avg([distinct | all] <列名>) | 统计一列值平均值 |
max([distinct | all] <列名>) | 统计一列值的最大值 |
min([distinct | all] <列名>) | 统计一列值的最小值 |
其中,distinct表示去除重复值,all表示保留所有值
1.5 分组操作
group by子句可以将查询的满足条件的元组按某一列或者多列的值进行分组,值相等的为一组。
当进行分组,并且使用聚集函数时,聚集函数分别作用于每个组。
可以使用having句子对分组之后得到的组进行筛选。
任何没有出现在group by子句中的列,如果出现在select子句中的话,那么它一定是出现在聚集函数内部。
1.6 排序操作
order by将查询结果按照一列或者多列的值进行排序,desc降序,asc升序
1.7 连接操作
同时涉及两个以上表的查询称为连接查询,通常需要在from子句中指定需要连接的表,在where子句中指定连接条件。常见的格式为:
[<表名1>.]<列名1> <比较运算符> [<表名2>.]<列名2>;
[<表名1>.]<列名1> between [<表名2>.]<列名2> and [<表名2>.]<列名3>;
注:如果连接操作的两个表是同一个表,则需要在from子句中使用as来重命名表的名字,以区分。
连接操作的三种写法:
select * from 表1, 表2 where 表1.列1==表2.列2;
select *
from ((表1 inner join 表2 on 表1.列1=表2.列2);
这里连接的方式有内连接(inner join,join)、左连接(left join,left outer join)、右连接(right join,right outer join)、外连接(full join,full outer join)、笛卡尔积(cross join)
select *
from ((表1 inner join 表2 using(列)));
using使用表示表1和表2具有同名字段
1.8 外连接操作
外连接是连接运算的扩展,用来处理缺失值。
左外连接取出左表中所有与右表中的任一元组都不匹配的元组,用控制填充所有右表中的属性,再将产生的元组加到左表和右表自然连接的结果中。
右外连接取出右表中所有与左表中的任一元组都不匹配的元组,用控制填充所有左表中的属性,再将产生的元组加到右表和左表自然连接的结果中。
全外连接的查询结果是左外连接和右外连接查询结果的并集。
1.9 嵌套查询
一个select-from-where语句是一个查询块,将一个查询块嵌套在另外一查询块的where子句、from子句或者having子句的条件中的查询称为嵌套查询。上层的查询称为外层查询或者父查询,下层的查询称为内层查询或者子查询。在求解嵌套查询时,先求解子查询,然后基于子查询的求解结果来求解父查询。
有些嵌套查询可以使用连接操作实现。当内层查询的查询结果是一个值时,使用=,>,<等比较运算符;当内层查询的结果是一个集合时,使用in, not in, any, all 等。
当子查询的查询条件不依赖于父查询的查询时为不相关子查询,依赖于父查询的某个属性的查询为相关子查询。
1.10 集合操作
SQL语句查询结果是元组的集合,因此,可以将查询结果进行集合操作,SQL中支持的集合操作主要包括并(union)、交(intersect)和差(except),参加集合操作的各查询结果列数必须相同,对应的数据类型也需要相同。
直接使用union、intersect、except表示去重,union/intersect/except all表示不去重
1.11 关系代数与SQL的转换
关系代数是关系型数据库理论的一部分,是SQL的基础,SQL在执行时需要先转换为等价的关系代数表达式。以下是转换规则:
关系代数运算 | 对应SQL语句 | 关系代数运算 | 对应SQL语句 |
选择运算 | where | 连接运算 | join |
投影运算 | select | 赋值运算 | as |
并运算 | union | 除运算 | not exists |
差运算 | except | 去重运算 | distinct |
笛卡尔积运算 | from | 广义投影运算 | select |
重命名运算 | as | 聚集运算 | 聚集函数 |
交运算 | intersect | 分组运算 | group by |
2 数据更新
数据更新包括插入数据、删除数据、修改数据
在执行数据更新时会检查所插入、修改和删除的元组是否破坏表中的完整性约束。如果不满足完整性约束,则可能会执行失败。
2.1 插入数据
insert into <表名> [(<列名1>,<列名2>)] values (<常量1>,<常量2>);
如果没有在into子句中出现的列,新元组在这些列上的取值为空值。into子句中的列名可以省略,那么values子句中则要按表中列的顺序依次列出所有列的取值。
2.2 插入子查询结果
insert into <表名> [(<列名1>,<列名2>)]
子查询;
2.3 修改数据
update <表名> set <列名1>=<表达式1> [,<列名2>=<表达式2>] where 条件;
如果没有where子句,则列对应的数据将全部被修改
2.4 删除数据
delete from <表名> where 条件;
如果没有where子句,则表对应的数据将全部被删除
三. SQL数据控制语言
SQL数据控制语言:
权限授予:用于向用户授予数据库操作权限
权限收回:用于向用户收回数据库操作权限
1 权限授予
grant <权限>[,<权限>]
on <对象类型><对象名>[,<对象类型><对象名>]
to <用户名>[,<用户名>]
[with grant option];
该语句的含义为将某些对象(由on子句指定,对象可以是表的形式)的某些操作权限(由grant子句指定)授予给某些用户(由to子句指定):
with grant option:被授权用户可以把该grant语句授予他的权限再授予其他用户
权限:查询数据权限(select)、插入新数据权限(insert)、更新数据权限(update)、删除数据权限(delete)
可以指定grant语句的用户:数据库管理员、数据库的创建者,拥有grant子句中指定的用户
2 权限收回
revoke <权限>[,<权限>]
on <对象类型><对象名>[,<对象类型><对象名>]
from <用户名>[,<用户名>]
[cascade | restrict];
该语句的含义为收回某些用户(由FROM子句指定)对某些对象(由ON子句指定)的某些操作权限(由REVOKE子句指定)
CASCADE:支持级联收回,即由这些用户授予了以上权限的用户的这些权限也会被收回(默认选项)
RESTRICT:不支持级联收回
四.存储过程和函数
存储过程和函数是实现经过编译并存储在数据库中的一段SQL语句的集合
存储过程和函数可以对一段代码进行封装,以便日后调用
数据库中创建存储过程的语句为create procedure,并通过call语句加存储过程名来调用存储过程
数据库中创建函数的语句为create function,并通过函数名来调用函数
存储过程的优势:降低网络开销、安全性高、性能高
存储过程的劣势:开发调式难、可移植性差、难以支持分布式数据库
1 创建和调用存储过程
create procedure <存储过程名> ([参数,参数])
begin
<SQL语句>
end <终止符>
call <存储过程名()>;
括号内指定参数列表(也可以没有参数,但括号不可省略)
终止符表示存储过程结束,使用 delimiter <符号> 来定义终止符
参数格式为:[in| out | inout] 参数名 参数数据类型
in表示该参数为输入参数,out表示该参数为输出参数,inout表示该参数既可以为输入也可以为输出
2 存储过程和函数的作用
存储过程和函数都用于提高数据库性能,减少频繁访问数据库和减少网络延迟等方式加速执行效率。
函数:简单的计算型任务,例如字符串或日期拼接、返回单个值等。
存储过程:复杂的业务逻辑、更新和删除相关操作。存储过程需要显式地被调用,并且可以包含各种复杂的控制结构和代码块。
3 创建和调用函数
create function <函数名> ([参数,参数])
returns <数据类型>
begin
<SQL语句>
end <终止符>
delimiter ;
select <函数名(参数)>;
参数格式与存储过程相似,但只能是in参数,returns返回数据类型,return返回数据值
4 存储过程和函数区别
存储过程可以通过out或者inout参数返回多个值,而函数只能返回returns子句中指定的某一类型的单值或表对象。
存储过程的参数可以为in、out、inout,而函数的参数只能是in类型。
存储过程可以通过call语句作为一个独立的部分来调用和执行,而函数可以作为查询语句的一部分来调用。此外,由于函数可以返回表对象,因此函数的返回结果可以用在查询语句的from子句中。
创建函数时必须指定返回值数据类型,且函数体内必须有一个returns语句。
存储过程中可以执行更新表的数据库操作,而函数不行。
5 变量和流程控制
变量:可以在存储过程和函数中声明比使用变量
流程控制:可以用来改变存储过程和函数内部语句的执行顺序。包括IF、LOOP、WHILE、REPEAT、LEAVE等。
5.1 变量
可以在存储过程和函数中声明并使用变量,变量的作为范围是在begin...end语块中
变量定义:
declare <变量名> <数据类型> [default <默认值>];
变量赋值:
set <变量名>=<表达式>;
5.2 IF语句
IF语句包含多个判断条件,根据判断结果是否为真来选择执行哪个分支。
if <表达式> then <sql语句>;
[elseif <表达式> then <sql语句>;
elseif <表达式> then <sql语句>;
]
else <sql语句>;
end if;
5.3 LOOP语句
LOOP语句时循环语句,用来重复执行一些语句:
[<标签>:] loop <sql语句> end loop [<标签>];
程序执行时,会重复执行loop后的语句块,知道循环被退出。
在loop语句中,使用leave子句可跳出循环。
loop语句中必须包含leave子句,否则会陷入死循环
标签可以用来标志一个loop语句,为可选项。
5.4 WHILE语句
while语句也是循环语句,当满足while语句的循环条件时,循环会一直执行;当不满足while语句的循环条件时,会跳出循环:
[<标签>:] while <表达式>
do <sql语句>
end while [<标签>];
5.5 删除存储过程和函数
drop procedure <存储过程名>;
drop function <函数名>;
五.触发器
触发器是与表相关的特殊的存储过程,在满足特定条件时,它会被触发执行
触发器是定义在基本表上的,当基本表被修改(比如插入、删除、更新数据)时,会激活定义在其上的触发器,该基本表称为触发器的目标表
触发器可以用来保证数据库的完整性
1 创建触发器
create trigger <触发器名>
<触发时机> <触发事件> on <表名>
for each row
<触发动作体>;
触发器名:要创建的触发器的名字
触发时机:指定了触发执行的时间,可以为before(触发事件之前)或after(触发事件之后)
触发事件:指定了当发生何种事件时,触发器会被激活,包括insert、delete、update
表名:指定了触发器时在哪张表上创建的
触发动作体:触发事件发生后要执行的SQL语句块
对于触发事件作用的每一行(for each row),会执行触发动作体
对于触发事件作用的每一行,在触发事件发生之前该行称为old,在触发事件发生之后称为new
可以使用old和new来访问触发事件发生前后的元组的值
2 删除触发器
drop trigger <触发器名>;
触发器时基于激活的,对数据库中每行数据的修改都会调用触发器。因此可能会导致数据库性能的降低,所以要避免编写太多的触发器。
触发器应用场景:数据完整性、数据审计、数据安全性、数据备份和同步
相关文章:
数据库--SQL
SQL:Structured Query Language,结构化查询语言 SQL是用于管理关系型数据库并对其中的数据进行一系列操作(包括数据插入、查询、修改删除)的一种语言 分类:数据定义语言DDL、数据操纵语言DML、数据控制语言DCL、事务处…...
SQL Server:Log Shipping 说明
目录标题 SQL Server Log Shipping与Oracle归档日志备份对比分析一、SQL Server Log Shipping的日志截断机制二、Oracle归档日志备份对比三、关键配置对比表四、最佳实践建议 如何修改和查看SQL Server默认备份配置防止自动删除?一、查看现有备份配置二、修改备份配…...
Zephyr实时操作系统初步介绍
一、概述 Zephyr是由Linux基金会托管的开源实时操作系统(RTOS),专为资源受限的物联网设备设计。其核心特性包括模块化架构、跨平台兼容性、安全性优先以及丰富的连接协议支持。基于Apache 2.0协议,Zephyr允许商业和非商业用途的自…...
【大模型系列篇】大模型基建工程:基于 FastAPI 自动构建 SSE MCP 服务器 —— 进阶篇
🔥🔥🔥 上期 《大模型基建工程:基于 FastAPI 自动构建 SSE MCP 服务器》中我们使用fastapi-mcp自动挂载fastapi到mcp工具,通过源码分析和实践,我们发现每次sse请求又转到了内部fastapi RESTful api接口&…...
深度学习deeplearn3
# Jupyter Notebook魔法命令,用于在Notebook中内联显示图表 %matplotlib inline# 导入NumPy库,用于高效的数值计算 import numpy as np# 从matplotlib_inline库导入backend_inline模块,用于设置图表显示格式 from matplotlib_inline import b…...
(九)图形管线
一图说明问题 顶点数据->顶点着色器->细分着色器->几何着色器->光栅化->片元着色器->颜色混合 创建图形管线函数放在后面位置 void MyApplication::initVulkan() { createInstance(); createSurface(); pickPhysicalDevice(); createLogicalDevice(); cre…...
7-3 逆序的三位数
程序每次读入一个正3位数,然后输出按位逆序的数字。注意:当输入的数字含有结尾的0时,输出不应带有前导的0。比如输入700,输出应该是7。 输入格式: 每个测试是一个3位的正整数。 输出格式: 输出按位逆序…...
git从历史版本创建新分支或标签
git从某个历史版本创建标签 # 查看历史版本 git log git tag tag-v1.0 780e2a7fc714faf388ba71git从某个分支的指定历史版本中创建新分支 # 查看历史版本 git log # 从历史分支创建标签 git checkout -b new-branch 780e2a7fc714faf388ba71...
HTML 音频(Audio)学习笔记
一、HTML 音频概述 在 HTML 中,音频可以通过多种方式播放,但要确保音频在不同浏览器和设备上都能正常播放,需要掌握一些技巧。HTML5 引入了 <audio> 元素,为音频播放提供了一种标准方法,但在 HTML4 中ÿ…...
五种音频器件综合对比——《器件手册--音频器件》
目录 音频器件 简述 1. 扬声器(Speakers) 2. 麦克风(Microphones) 3. 放大器(Amplifiers) 4. 音频接口(Audio Interfaces) 5. 音频处理器(Audio Processors)…...
数据结构复习(单调栈,单调队列,KMP,manacher,tire,字符串哈希)
单调栈: 介绍: 单调栈用于解决"寻找每个元素左侧/右侧第一个比它小/大的元素"类问题。栈中元素保持单调性,时间复杂度O(n)。 维护一个严格递增栈。对于每个元素a[i],不断弹出栈顶比a[i]大的元素,剩下的栈顶即…...
(学习总结32)Linux 基础 IO
Linux 基础 IO 一、什么是 " 文件 "二、C 文件接口打开文件写文件读文件其它介绍 三、系统文件 I/O传递标志位系统接口写文件系统接口读文件部分系统调用接口介绍打开文件函数 open关闭文件函数 close写入文件函数 write读取文件函数 read 文件描述符 fdfd 0 & 1…...
操作系统(一):概念及主流系统全分析
目录 一.操作系统是什么 二.操作系统的分类 2.1 按应用场景分类 2.2 按实时性分类 2.3 按内核架构分类 2.4 按用户与任务分类 三.主流操作系统比较 四.未来趋势 一.操作系统是什么 操作系统(Operating System, OS)是计算机系统的核心软件&#x…...
三、GPIO
一、GPIO简介 GPIO(General Purpose Input Output)通用输入输出口GPIO引脚电平:0V(低电平)~3.3V(高电平),部分引脚可容忍5V 容忍5V,即部分引脚输入5V的电压,…...
Ceph异地数据同步之-RBD异地同步复制(上)
#作者:闫乾苓 文章目录 前言基于快照的模式(Snapshot-based Mode)工作原理单向同步配置步骤单向同步复制测试双向同步配置步骤双向同步复制测试 前言 Ceph的RBD(RADOS Block Device)支持在两个Ceph集群之间进行异步镜…...
fastapi完全离线环境(无外网)的访问Swagger所做特殊处理
在互联网环境中,只要 启动FastAPI 服务运行在本地机器上,访问 http://localhost:8000/docs(Swagger UI)就可以访问到Swagger界面,但是在完全离线环境(无外网)下如何访问Swagger页面呢࿱…...
在网络中加入预训练的多层感知机(MLP)有什么作用?
在网络中加入预训练的多层感知机(MLP)通常是为了引入先验知识、提升特征表示能力或dropout,具体作用取决于MLP的设计和预训练任务。以下是常见的应用场景和优势: 1. 特征融合与迁移学习:预训练的MLP可以作为特征提取器࿰…...
3.2/Q2,GBD数据库最新文章解读
文章题目:Temporal trends in the burden of vertebral fractures caused by falls in China and globally from 1990 to 2021: a systematic analysis of the Global Burden of Disease Study 2021 DOI:10.1186/s13690-025-01500-y 中文标题:…...
机器学习的一百个概念(9)学习曲线
前言 本文隶属于专栏《机器学习的一百个概念》,该专栏为笔者原创,引用请注明来源,不足和错误之处请在评论区帮忙指出,谢谢! 本专栏目录结构和参考文献请见[《机器学习的一百个概念》 ima 知识库 知识库广场搜索&…...
浅谈Tomcat数据源连接池
目录 为什么需要JDBC连接池 Tomcat JDBC Pool 相关参数 1. 基本配置 2. 连接池大小控制 3. 连接验证与测试 4. 空闲连接回收 5. 连接泄漏与超时 Tomcat JDBC Pool 源码分析(tomcat 8.5.3) DataSourceFactory DataSource ConnectionPool Pool…...
Techub 财报解读:Circle 冲刺 IPO,但收入增长难掩利润困局
作者:Techub 财报解读 撰文:Yangz,Techub News 4 月 1 日,Circle 向美国证券交易委员会(SEC)提交 S-1 文件,计划进行首次公开募股(IPO),股票代码为 CRCL&…...
C++中的链表操作
在C中,链表是一种常见的数据结构,它由一系列节点组成,每个节点包含数据部分和指向下一个节点的指针。C标准库(STL)中提供了std::list和std::forward_list两种链表实现,分别对应双向链表和单向链表。此外&am…...
Vue2 生命周期
文章目录 前言🔄 Vue2 生命周期流程(8个核心钩子)📝 代码中典型用法示例一、您的描述验证二、完整生命周期代码示例三、关键阶段行为说明🔍 常见问题 前言 提示:以下是本篇文章正文内容,下面案…...
2007-2022年 上市公司政府补助数据 -社科数据
上市公司政府补助数据(2007-2022年)-社科数据https://download.csdn.net/download/paofuluolijiang/90028547 https://download.csdn.net/download/paofuluolijiang/90028547 政府补助是指政府为支持企业发展,提供的资金或资源支持。对于上市…...
设计心得——状态机
一、状态机 在设计一些与硬件交互或者游戏等开发中,经常会听到状态机(State Machines)这个字眼,而在设计模式(GoF)中,又经常听到状态模式这个概念,它们之间有什么联系和不同呢&…...
python match case语法
学习路线:B站 普通的if判断 def if_traffic_light(color):if color red:return Stopelif color yellow:return Slow downelif color green:return Goelse:return Invalid colorprint(if_traffic_light(red)) # Output: Stop print(if_traffic_light(yellow)) …...
Lua中协程相关函数使用详解
目录 1. coroutine.create(f)2. coroutine.resume(co [, val1, ...])3. coroutine.yield([val1, ...])4. coroutine.status(co)5. coroutine.wrap(f)6. coroutine.running()7. coroutine.isyieldable()协程状态转换示例总结 Lua 中的协程(coroutine)提供…...
代码拟有感
最近的日子像被按了0.5倍速播放键。腱鞘炎让手腕转动时发出咯吱声,尾骨的钝痛让久坐变成酷刑,落枕的脖子和酸胀的手臂组成了“疼痛交响乐”——这些隐秘的、持续的身体抗议,让原本枯燥的代码练习变成了一场生理与意志的拉锯战。 我盯着屏幕苦…...
《实战AI智能体》MCP对Agent有哪些好处
首先MCP为Agent提供了标准化的方式来接入各种工具和数据源,无论是本地运行的工具,例如通过stdio服务器,还是远程托管的服务HTTP over SSE服务, Agent都可以通过统一的接口与它们进行交互,极大扩展了第三方工具库。 例如,在金融领域,Agent 可以接入股票分析的MCP工具。当…...
maptalks获取所有图层并把图层按照zIndex排序
maptalks获取所有图层并把图层按照zIndex排序 获取所有图层 通过调用 map.getLayers() 可以返回当前地图上所有的图层集合。此方法会返回一个数组形式的结果,其中包含了地图上的每一个图层层级对象。 图层属性中的 ZINDEX 每种图层类型(如矢量图层、…...
GUI-Guider 按钮按下 选项卡 右移动一个,到最右边停下
extern lv_ui guider_ui; // 在文件顶部添加// 在按钮事件中使用: lv_obj_t * tabview guider_ui.screen_tabview_1; // 替换为你的实际 TabView 名称 uint16_t current lv_tabview_get_tab_act(tabview); lv_tabview_set_act(tabview, current 1, LV_ANIM_ON); …...
让AI再次伟大-MCP-Client开发指南
👏作者简介:大家好,我是爱吃芝士的土豆倪,24届校招生Java选手,很高兴认识大家📕系列专栏:Spring原理、JUC原理、Kafka原理、分布式技术原理、数据库技术、JVM原理、AI应用🔥如果感觉…...
sql工具怎么选?
为什么大多数主流工具又贵又难用? 有没有一款免费好用的sql工具? 像大多人朋友常用的sql工具,应该都遇到过这种情况, 用着用着收到了来自品牌方的律师函, 或者处理数据经常卡死, 再或者不支持国产数据库…...
video标签播放mp4格式视频只有声音没有图像的问题
video标签播放mp4格式视频只有声音没有图像的问题 这是由于视频格式是hevc(H265)编码的,这种编码格式视频video播放有问题主要是由于以下两种原因导致的: 1、浏览器没有开启硬加速模式: 开启方法(以谷歌浏览器为例)&a…...
问题解决:glog中的LOG(INFO)与VLOG无法打印
本作品采用知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议进行许可。 本作品 (李兆龙 博文, 由 李兆龙 创作),由 李兆龙 确认,转载请注明版权。 文章目录 MotivationProcess glog版本为:https://github.com/google/glog/archive/…...
【第2月 day16】Matplotlib 散点图与柱状图
好的!以下是针对初学者的 Matplotlib 散点图与柱状图 学习内容,用简单易懂的语言和示例讲解: 一、散点图(Scatter Plot) 作用:展示两个变量之间的关系(如相关性、分布等)。 1. 核心…...
汽车 HMI 设计的发展趋势与设计要点
一、汽车HMI设计的发展历程与现状 汽车人机交互界面(HMI)设计经历了从简单到复杂、从单一到多元的演变过程。2012年以前,汽车HMI主要依赖物理按键进行操作,交互方式较为单一。随着特斯拉Model S的推出,触控屏逐渐成为…...
Vue 3 中按照某个字段将数组分成多个数组
方法一:使用 reduce 方法 const originalArray [{ id: 1, category: A, name: Item 1 },{ id: 2, category: B, name: Item 2 },{ id: 3, category: A, name: Item 3 },{ id: 4, category: C, name: Item 4 },{ id: 5, category: B, name: Item 5 }, ];const grou…...
06-Spring 中的事件驱动机制
Spring 中的事件驱动机制(ApplicationEvent 源码解析) 本小结主要总结Spring的事件,如果对于观察者模式比较熟悉的话,理解这个应该不难。 这块涉及的面试题相对简单,主要还是以日常使用为主。 另外在Spring的源码中也运…...
Python学习笔记(8)关于列表内置函数和多维列表
列表访问计数 索引直接访问 index()#获得首次出现指定元素的索引 index(value,[start,[end]] #控制搜索索引范围 counr()#获得指定元素在列表中出现的次数 len()#返回列表长度 成员资格判断 incount()返回0,代表不存在 列表切片 slice[起始偏移量 start:终止…...
【算法学习计划】回溯 -- 递归
目录 leetcode 面试题08.06.汉诺塔问题 leetcode 21.合并两个有序链表 leetcode 206.反转链表 leetcode 24.两两交换链表中的节点 leetcode 50. Pow(x, n) 本篇文章将是我们回溯专题的第一篇文章,在这里我先浅浅讲一下什么是回溯 其实就是递归,只不…...
Unity中 JobSystem使用整理
Unity 的JobSystem允许创建多线程代码,以便应用程序可以使用所有可用的 CPU 内核来执行代码,这提供了更高的性能,因为您的应用程序可以更高效地使用运行它的所有 CPU 内核的容量,而不是在一个 CPU 内核上运行所有代码。 可以单独使…...
【从零实现Json-Rpc框架】- 项目实现 - 服务端主题实现及整体封装
📢博客主页:https://blog.csdn.net/2301_779549673 📢博客仓库:https://gitee.com/JohnKingW/linux_test/tree/master/lesson 📢欢迎点赞 👍 收藏 ⭐留言 📝 如有错误敬请指正! &…...
JavaScript基础-移动端常用开发框架
随着移动互联网的发展,越来越多的应用和服务需要支持移动设备。为了提高开发效率和用户体验,开发者们依赖于一些成熟的JavaScript框架来构建响应迅速、功能丰富的移动Web应用。本文将介绍几款广泛使用的移动端开发框架,并通过具体的示例展示它…...
Tree - Shaking
Vue 3 的 Tree - Shaking 技术详解 Tree - Shaking 是一种在打包时移除未使用代码的优化技术,在 Vue 3 中,Tree - Shaking 发挥了重要作用,有效减少了打包后的代码体积,提高了应用的加载性能。以下是对 Vue 3 中 Tree - Shaking …...
VSCode历史版本的下载安装
VSCode历史版本的下载安装 文章目录 VSCode历史版本的下载安装VSCode安装下载历史版本地址查询VSCode历史版本的 commit id 安装参考资料 VSCode安装 Windows版本:Windows10VSCode版本:VScode1.65.0(64位User版本)本文编写时间&a…...
Websoft9分享:在数字化转型中选择开源软件可能遇到的难题
引言:中小企业数字化转型的必由之路 全球94.57%的企业已采用开源软件(数据来源:OpenLogic 2024报告),开源生态估值达8.8万亿美元。中小企业通过开源软件构建EPR系统、企业官网、数据分析平台等,可节省80%软件采购成本。…...
【无人机】无人机PX4飞控系统高级软件架构
目录 1、概述(图解) 一、数据存储层(Storage) 二、外部通信层(External Connectivity) 三、核心通信枢纽(Message Bus) 四、硬件驱动层(Drivers) 五、飞…...
新版本Xmind结合DeepSeek快速生成美丽的思维导图
前言 我的上一篇博客(https://quickrubber.blog.csdn.net/article/details/146518898)中讲到采用Python编程可以实现和Xmind的互动,并让DeepSeek来生成相应的代码从而实现对内容的任意修改。但是,那篇博客中提到的Xmind有版本的限…...
Windows查重工具,强烈推荐大家收藏!
我大家在用电脑的时候,是不是发现用得越久,电脑里的软件和文件就越多? 今天我给大家带来的这两款重复文件查找神器,简直就是电脑里的“清洁小能手”,能帮你把那些重复的文件和文件夹找出来。 Easy DupLicate Finder 重…...