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

【MySQL数据库】基础总结

目录

前言

一、概述

二、 SQL

1. SQL通用语法

2. SQL分类

3. DDL

3.1 数据库操作

3.2 表操作

4. DML

5. DQL

5.1 基础查询

5.2 条件查询

5.3 聚合函数 

5.4 分组查询

5.5 排序查询

5.6 分页查询

6. DCL

6.1 管理用户

6.2 权限控制

三、数据类型

1. 数值类型

2. 字符串类型

3. 日期时间类型

4. 选择建议

四、函数

1. 字符串函数

2. 数值函数

3. 日期函数 

4. 流程函数

五、约束

六、多表查询

1. 内连接

2. 外连接

3. 自连接

4. 联合查询

5. 子查询

5.1 标量子查询

5.2 列子查询

5.3 行子查询

5.4 表子查询

七、事务

1. 事务概述

2. 并发事务问题

3. 事务隔离级别

总结 


前言

  本篇文章总结了与MySQL有关的一些基础知识,包含SQL、数据类型、函数、多表查询和事务,一些知识点不会说明地特别详细,可用来随时回顾与复习。与MySQL有关的其他知识点可以参考其相关的手册。

MySQL 8.0 参考手册_MySQL 8.0 参考手册

MySQL :: MySQL 8.4 Reference ManualMySQL 8.4 参考手册MySQL :: MySQL 8.4 Reference Manual

一、概述

  我们需要了解下图所示的三个概念:

  另外,目前市面上有许多流行的关系型数据库,如Oracle、MySQL、SQLlite等等。不论我们使用的是上面的哪一个关系型数据库,最终在操作时,都是使用SQL语言来进行统一操作,因为我们前面讲到SQL语言,是操作关系型数据库的统一标准

二、 SQL

1. SQL通用语法

  • SQL语句可以用单行活多行书写,以分号结尾。
  • SQL语句可以使用空格/缩进来增强语句的可读性。
  • MySQL数据库的SQL语句不区分大小写,关键字建议使用大写。
  • 注释:
    • 单行注释: -- 注释内容 或 # 注释内容
    • 多行注释:/* 注释内容 */

2. SQL分类

SQL语句,根据其功能,主要分为四类:DDL、DML、DQL、DCL。

3. DDL

3.1 数据库操作

  下面是数据库操作的示例,其中注释解释了SQL的具体作用:

SHOW DATABASES; # 查询所有数据库SELECT DATABASE(); # 查询当前数据库/*
说明:创建数据库
create database [ if not exists ] 数据库名 [ default charset 字符集 ] [ collate 排序规则 ] ;
*/
CREATE DATABASE IF NOT EXISTS animal DEFAULT CHARSET utf8mb4;DROP DATABASE IF EXISTS animal; # 删除数据库USE animal; # 切换数据库

3.2 表操作

  下面是表操作的示例,其中注释解释了SQL的具体作用:

SHOW TABLES; # 查询当前数据库所有表DESC sys_user; # 查看指定表结构SHOW CREATE TABLE sys_user; # 查询指定表的建表语句/*
说明:创建表结构
CREATE TABLE 表名(字段1 字段1类型 [ COMMENT 字段1注释 ],字段2 字段2类型 [COMMENT 字段2注释 ],字段3 字段3类型 [COMMENT 字段3注释 ],......字段n 字段n类型 [COMMENT 字段n注释 ]
) [ COMMENT 表注释 ] ;
*/
CREATE TABLE tb_student(id INT COMMENT '编号',`name` VARCHAR(15) COMMENT '姓名'
) COMMENT '学生表';/*
说明:添加字段
ALTER TABLE 表名 ADD 字段名 类型 (长度) [ COMMENT 注释 ] [ 约束 ];
*/
ALTER TABLE tb_student ADD age TINYINT COMMENT '年龄';/*
说明:修改字段类型
ALTER TABLE 表名 MODIFY 字段名 新数据类型 (长度) [ COMMENT 注释 ] [ 约束 ];
*/
ALTER TABLE tb_student MODIFY age INT COMMENT '年龄';/*
说明:修改字段名和字段类型
ALTER TABLE 表名 CHANGE 旧字段名 新字段名 类型 (长度) [ COMMENT 注释 ] [ 约束 ];
*/
ALTER TABLE tb_student CHANGE age age_new INT COMMENT '年龄';ALTER TABLE tb_student RENAME TO tb_student_new; # 修改表名DROP TABLE IF EXISTS tb_student_new; # 删除表TRUNCATE TABLE tb_student; # 删除指定表,并重新创建表

4. DML

  下面是DML的示例,其中注释解释了SQL的具体作用:

/*
说明:给指定字段添加数据
INSERT INTO 表名 (字段名1, 字段名2, ...) VALUES (值1, 值2, ...);
*/
INSERT INTO tb_student (`name`) VALUES ('小明');/*
说明:给全部字段添加数据
INSERT INTO 表名 VALUES (值1, 值2, ...);
*/
INSERT INTO tb_student VALUES (1, '小王');/*
说明:批量添加数据
INSERT INTO 表名 (字段名1, 字段名2, ...) VALUES (值1, 值2, ...), (值1, 值2, ...), (值
1, 值2, ...) ;
*/
INSERT INTO tb_student (`name`) VALUES ('小美'), ('王肖');/*
说明:修改数据
UPDATE 表名 SET 字段名1 = 值1 , 字段名2 = 值2 , .... [ WHERE 条件 ] ;
*/
UPDATE tb_student SET `name` = '老王' WHERE `name` = '小王';/*
说明:删除数据
DELETE FROM 表名 [ WHERE 条件 ] ;
*/
DELETE FROM tb_student;

5. DQL

  DQL查询语句基本语法如下:

SELECT字段列表
FROM表名列表
WHERE条件列表
GROUP BY分组字段列表
HAVING分组后条件列表
ORDER BY排序字段列表
LIMIT分页参数

  DQL的编写顺序与实际的执行顺序不太一样,具体的顺序如下图所示:

5.1 基础查询

  在基本查询的DQL语句中,不带任何的查询条件,查询的语法如下:

1). 查询多个字段

SELECT 字段1, 字段2, 字段3 ... FROM 表名 ;
SELECT * FROM 表名 ;

 2). 字段设置别名

SELECT 字段1 [ AS 别名1 ] , 字段2 [ AS 别名2 ] ... FROM 表名;
SELECT 字段1 [ 别名1 ] , 字段2 [ 别名2 ] ... FROM 表名;

3). 去除重复记录 

SELECT DISTINCT 字段列表 FROM 表名;

5.2 条件查询

  条件查询的语法格式如下:

SELECT 字段列表 FROM 表名 WHERE 条件列表 ;

  对于条件来说,有如下图所示的常用的比较运算符和逻辑运算符:

5.3 聚合函数 

  聚合函数是将一列数据作为一个整体,进行纵向计算 ,聚合函数的语法如下:

SELECT 聚合函数(字段列表) FROM 表名 ;
注意 : NULL 值是不参与所有聚合函数运算的。

  常见的聚合函数如下图所示:

5.4 分组查询

  分组查询的语法格式如下所示:

SELECT 字段列表 FROM 表名 [ WHERE 条件 ] GROUP BY 分组字段名 [ HAVING 分组后过滤条件 ];

WHERE 和 HAVING的区别如下:

  1. 执行时机不同:where是分组之前进行过滤,不满足where条件,不参与分组;而having是分组之后对结果进行过滤。
  2. 判断条件不同:where不能对聚合函数进行判断,而having可以。

 注意事项:

  • 分组之后,查询的字段一般为聚合函数和分组字段,查询其他字段无任何意义。
  • 执行顺序: where > 聚合函数 > having 。
  • 支持多字段分组, 具体语法为 : group by columnA,columnB

5.5 排序查询

  排序查询的语法格式如下:

SELECT 字段列表 FROM 表名 ORDER BY 字段1 排序方式1 , 字段2 排序方式2 ;

  排序方式如下:

  • ASC : 升序(默认值)
  • DESC: 降序

注意事项:
  • 如果是升序, 可以不指定排序方式ASC ;
  • 如果是多字段排序,当第一个字段值相同时,才会根据第二个字段进行排序 ;

5.6 分页查询

  分页查询的语法格式如下:

SELECT 字段列表 FROM 表名 LIMIT 起始索引, 查询记录数 ;
注意事项:
  • 起始索引从0开始,起始索引 = (查询页码 - 1)* 每页显示记录数。
  • 分页查询是数据库的方言,不同的数据库有不同的实现,MySQL中是LIMIT。
  • 如果查询的是第一页数据,起始索引可以省略,直接简写为 limit 10。

6. DCL

6.1 管理用户

-- 创建用户
CREATE USER '用户名'@'主机名' IDENTIFIED BY '密码';-- 修改用户密码
ALTER USER '用户名'@'主机名' IDENTIFIED WITH mysql_native_password BY '新密码' ;-- 删除用户
DROP USER '用户名'@'主机名' ;

注意事项:

  • 在MySQL中需要通过用户名@主机名的方式,来唯一标识一个用户。
  • 主机名可以使用 % 通配。
  • 这类SQL开发人员操作的比较少,主要是DBA( Database Administrator 数据库管理员)使用。

6.2 权限控制

  MySQL 中定义了很多种权限,但是常用的就以下几种:

更多权限可参考:6.2.2 MySQL提供的权限_MySQL 8.0 参考手册

  下面是有关权限控制的语法示例:

-- 查询权限
SHOW GRANTS FOR '用户名'@'主机名' ;-- 授予权限
GRANT 权限列表 ON 数据库名.表名 TO '用户名'@'主机名';-- 撤销权限
REVOKE 权限列表 ON 数据库名.表名 FROM '用户名'@'主机名';
注意事项:
  • 多个权限之间,使用逗号分隔。
  • 授权时, 数据库名和表名可以使用 * 进行通配,代表所有。

三、数据类型

  对于表操作来说,我们需要先了解数据库中包含哪些数据类型,才能更好地进行操作,下面我们将补充说明MySQL中存在的一些数据类型,下图是对数据类型的一个分类:

备注:下面我们将简单介绍前面三种常见的数据类型,有关其他类型和更详细的解释,可以参考下面:

博客:MySQL数据类型精讲-CSDN博客

MySQL中文手册:第 11 章数据类型_MySQL 8.0 参考手册

1. 数值类型

  整数类型是数据库中最基本的数据类型。

  MySQL中使用浮点类型和定点类型来表示小数。浮点类型包括单精度浮点数(FLOAT型)和双精度浮点数(DOUBLE型),定点数类型就是DECIMAL型。浮点数型在数据库中存放的是近似值,而定点数类型在数据库中存放的是精确值。

举例说明DECIMAL:DECIMAL(5,2) 中的第一个参数 5 指定了数值的最大总长度,即整数部分加上小数部分的总和不能超过 5 位。第二个参数 2 表示小数点后的位数,也就是小数点后面应该保留两位小数。如果插入的数据没有提供足够多的小数位数,则会自动补足到指定的数量;反之,如果有更多的小数位数,则会被截断或四舍五入到最接近的有效值2。

2. 字符串类型

  CHAR和VARCHAR区别:

  1. 都可以通过指定n来限制存储的最大字符数长度,CHAR(20)和VARCHAR(20)将最多只能存储20个字符,超过的字符会被截掉。n必须小于该类型允许的最大字符数。
  2. CHAR类型指定了n之后,如果存入的字符数小于n,后面将会以空格补齐,查询的时候再将末尾的空格去掉,所以CHAR类型存储的字符串末尾不能有空格,VARCHAR不受此限制。
  3. 内部存储机制不同,CHAR是固定长度,CHAR(4)不管是存入1个字符,2个字符或者是4个字符(英文的),都将占用4个字节。VARCHAR是存入的实际字符数+1个字字节(n<=255)或2个字节(n>255),所以VARCHAR(4),存入1个字符将占用2个字节,2个字符占用3个字节,4个字符占用5个字节。
  4. CHAR类型的字符串检索速度要比VARCHAR类型的快。

  BLOB和TEXT是对应的,不过存储方式不同,TEXT是以文本方式存储的,而BLOB是以二进制方式存储的。如果存储英文的话,TEXT区分大小写,而BLOB不区分大小写。TEXT可以指定字符集,BLOB不用指定字符集。

  二进制类型实在数据库中存储二进制数据的数据类型,如数码照片、视频和扫描的文档等数据。在MySQL中是用BLOB数据类型存储这些数据。BLOB有四种类型:TINYBLOB、BLOB、MEDIUMBLOB、LONGBLOB,其中最大长度对应4种TEXT数据类型。 

  BINARY和VARBINARY数据类型类似于CHAR和VARCHAR。不同之处在于BINARY与VARBINARY使用字节为存储单位,而CHAR与VARCHAR使用字符为存储单位。例如,INARY(5)表示5字节的二进制数据,CHAR(5)表示存储5个字符的数据。 BINARY(n):固定n个字节二进制数据。n的取值范围为1~255,默认为1.若输出的字节长度小于n,则不足部分以0填充。BINARY(n)数据存储的长度为n+4个字节。 VARBINARY(n):可变长度,n的取值范围是1~65535,默认为1,数据存储长度为实际长度+4个字节。

3. 日期时间类型

  日期和时间类型是为了方便在数据库中存储日期和时间而设计的。

4. 选择建议

 

四、函数

  函数 是指一段可以直接被另一段程序调用的程序或代码。 也就意味着,这一段程序或代码在 MySQL中已经给我们提供了,我们要做的就是在合适的业务场景调用对应的函数完成对应的业务需求即可。

1. 字符串函数

2. 数值函数

3. 日期函数 

4. 流程函数

五、约束

   约束是作用于表中字段上的规则,用于限制存储在表中的数据。其目的是保证数据库中数据的正确、有效性和完整性。约束是作用于表中字段上的,可以在创建表/修改表的时候添加约束。约束的分类如下:

  下面是一个建表的时候使用约束的例子:

CREATE TABLE tb_user(id int AUTO_INCREMENT PRIMARY KEY COMMENT 'ID唯一标识',name varchar(10) NOT NULL UNIQUE COMMENT '姓名' ,age int check (age > 0 && age <= 120) COMMENT '年龄' ,status char(1) default '1' COMMENT '状态',gender char(1) COMMENT '性别'
);

  在这些约束里面,比较重要的是外键约束,下面是外键约束的一般语法格式:

-- 添加外键
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. 内连接

  内连接的语法格式如下:

-- 隐式内连接
SELECT 字段列表 FROM 表1 , 表2 WHERE 条件 ... ;-- 显示内连接
SELECT 字段列表 FROM 表1 [ INNER ] JOIN 表2 ON 连接条件 ... ;

注意:如果一边或两边的数据对于连接字段是NULL,那么这些行就不会出现在内连接的结果集中。

2. 外连接

  外连接的语法格式如下:

-- 左外连接
SELECT 字段列表 FROM 表1 LEFT [ OUTER ] JOIN 表2 ON 条件 ... ;-- 右外连接
SELECT 字段列表 FROM 表1 RIGHT [ OUTER ] JOIN 表2 ON 条件 ... ;
注意事项: 左外连接和右外连接是可以相互替换的,只需要调整在连接查询时SQL中,表结构的先后顺序就可以了。而我们在日常开发使用时,更偏向于左外连接。

3. 自连接

  自连接查询,顾名思义,就是自己连接自己,也就是把一张表连接查询多次。对于自连接查询,可以是内连接查询,也可以是外连接查询。自连接查询的语法格式如下:

SELECT 字段列表 FROM 表A 别名A JOIN 表A 别名B ON 条件 ... ;
  在自连接查询中,必须要为表起别名,要不然我们不清楚所指定的条件、返回的字段,到底
是哪一张表的字段。

4. 联合查询

  对于union查询,就是把多次查询的结果合并起来,形成一个新的查询结果集,其语法格式如下:

SELECT 字段列表 FROM 表A ...
UNION [ ALL ]
SELECT 字段列表 FROM 表B ....;
  • 对于联合查询的多张表的列数必须保持一致,字段类型也需要保持一致。
  • union all 会将全部的数据直接合并在一起,union 会对合并之后的数据去重。

5. 子查询

  SQL 语句中嵌套 SELECT 语句,称为嵌套查询,又称子查询。对于子查询来说,大致分为如下几类:
  1. 标量子查询(子查询结果为单个值)
  2. 列子查询(子查询结果为一列)
  3. 行子查询(子查询结果为一行)
  4. 表子查询(子查询结果为多行多列)

5.1 标量子查询

  子查询返回的结果是单个值(数字、字符串、日期等),最简单的形式,这种子查询称为标量子查询。常用的操作符有 =、<>、 > 、>=、 <、 <=。示例如下:
-- 根据销售部部门ID查询员工信息
select * from emp where dept_id = (select id from dept where name = '销售部');

5.2 列子查询

  子查询返回的结果是一列(可以是多行),这种子查询称为列子查询。常用的操作符有 IN NOT IN ANY SOME ALL。

  示例如下:

-- 根据部门ID查询员工信息
select * from emp where dept_id in (select id from dept where name = '销售部' or name = '市场部');-- 查询比财务部所有员工工资都高的员工信息
select * from emp where salary > all ( select salary from emp where dept_id = (select id from dept where name = '财务部') );

5.3 行子查询

  子查询返回的结果是一行(可以是多列),这种子查询称为行子查询。 常用的操作符有 = <> IN NOT IN。示例如下:
-- 查询与张无忌的薪资及直系领导相同的员工信息
select * from emp where (salary,managerid) = (select salary, managerid from emp where name = '张无忌');

5.4 表子查询

  子查询返回的结果是多行多列,这种子查询称为表子查询。 常用的操作符为 IN。示例如下:
-- 查询与鹿杖客, 宋远桥的职位和薪资相同的员工信息
select * from emp where (job,salary) in ( select job, salary from emp where name = '鹿杖客' or name = '宋远桥' );

七、事务

1. 事务概述

  事务是一组操作的集合,它是一个不可分割的工作单位,事务会把所有的操作作为一个整体一起向系统提交或撤销操作请求,即这些操作要么同时成功,要么同时失败。事务具有如下四个特性,简称ACID,这四个特性如下:

  1. 原子性(Atomicity):事务是不可分割的最小操作单元,要么全部成功,要么全部失败。
  2. 一致性(Consistency):事务完成时,必须使所有的数据都保持一致状态。
  3. 隔离性(Isolation):数据库系统提供的隔离机制,保证事务在不受外部并发操作影响的独立环境下运行。
  4. 持久性(Durability):事务一旦提交或回滚,它对数据库中的数据的改变就是永久的
注意: 默认MySQL的事务是自动提交的,也就是说,当执行完一条DML语句时,MySQL会立即隐式的提交事务。

  下面是MySQL当中对事务的控制:

SELECT @@autocommit ; # 查询事务提交方式
SET @@autocommit = 0 ; # 把默认的自动提交修改为了手动提交, 默认值为1(自动提交)-- 开启事务
START TRANSACTION 或 BEGIN ;-- 提交事务
COMMIT;-- 回滚事务
ROLLBACK;

  下面是有关事务的一个转账案例:

-- 开启事务
start transaction-- 1. 查询张三余额
select * from account where name = '张三';-- 2. 张三的余额减少1000
update account set money = money - 1000 where name = '张三';-- 3. 李四的余额增加1000
update account set money = money + 1000 where name = '李四';-- 如果正常执行完毕, 则提交事务
commit;-- 如果执行过程中报错, 则回滚事务
-- rollback;

2. 并发事务问题

  赃读:一个事务读到另外一个事务还没有提交的数据。比如 B 读取到了 A 未提交的数据。

  不可重复读:一个事务先后读取同一条记录,但两次读取的数据不同,称之为不可重复读。事务A两次读取同一条记录,但是读取到的数据却是不一样的。

  幻读:一个事务按照条件查询数据时,没有对应的数据行,但是在插入数据时,又发现这行数据已经存在,好像出现了 " 幻影 "

3. 事务隔离级别

  为了解决并发事务所引发的问题,在数据库中引入了事务隔离级别。主要有以下几种:

   有关事务隔离级别的操作语法如下:

-- 查看事务隔离级别
SELECT @@TRANSACTION_ISOLATION;-- 设置事务隔离级别
SET [ SESSION | GLOBAL ] TRANSACTION ISOLATION LEVEL { READ UNCOMMITTED |
READ COMMITTED | REPEATABLE READ | SERIALIZABLE }
注意:事务隔离级别越高,数据越安全,但是性能越低。

总结

  本篇博客总结了MySQL数据库的一些基础知识,如果您觉得有用的话,可以点一个关注,让我们一起努力进步吧!!

相关文章:

【MySQL数据库】基础总结

目录 前言 一、概述 二、 SQL 1. SQL通用语法 2. SQL分类 3. DDL 3.1 数据库操作 3.2 表操作 4. DML 5. DQL 5.1 基础查询 5.2 条件查询 5.3 聚合函数 5.4 分组查询 5.5 排序查询 5.6 分页查询 6. DCL 6.1 管理用户 6.2 权限控制 三、数据类型 1. 数值类…...

acwing_5721_化学方程式配平

acwing_5721_化学方程式配平 这是一道T3的题目&#xff0c;操作起来可能有些棘手&#xff0c;但是耐下心来做一遍会有收获的&#xff01; 下面是对于大佬的题解进行的注释 #include <iostream> #include <string> #include <map> #include <vector>…...

C++ 中的 template <typename T> 用法 ← 泛型

【语法解析】 ● C 中的 template <typename T> 用法 template <typename T> 是C编程语言中的一个模板声明&#xff0c;用于定义一个模板&#xff0c;其中 T 是一个模板参数&#xff0c;可以是任何类型。这种机制允许程序员编写与类型无关的代码&#xff0c;从而提…...

C语言 操作符_位操作符、赋值操作符、单目操作符

1.位操作符 & - 按&#xff08;2进制&#xff09;位与 | - 按&#xff08;2进制&#xff09;位或 ^ - 按&#xff08;2进制&#xff09;位异或 只适用于整型 例&#xff1a;实现交换两个变量的值&#xff0c;要求不能新建变量 //3^3 0 -> a^a 0 //011 //011 //000 …...

C++ 鼠标轨迹算法 - 防止游戏检测

一.简介 鼠标轨迹算法是一种模拟人类鼠标操作的程序&#xff0c;它能够模拟出自然而真实的鼠标移动路径。 鼠标轨迹算法的底层实现采用C/C语言&#xff0c;原因在于C/C提供了高性能的执行能力和直接访问操作系统底层资源的能力。 鼠标轨迹算法具有以下优势&#xff1a; 模拟…...

计算机网络 笔记 数据链路层3(局域网,广域网,网桥,交换机)

局域网: LAN:在某一区域内由多台计算机互联成的计算机组&#xff0c;使用广播信道 特点&#xff1a; 覆盖范围有限&#xff1a;通常局限在几千米范围内&#xff0c;比如一栋办公楼、一个校园或一个工厂等相对较小的地理区域。 数据传输速率高&#xff1a;一般能达到 10Mbps…...

【Qnx】Qnx常用工具

Qnx常用分析工具 近期项目中Qnx端常用到的工具&#xff0c;总结一下。 查看进程 Display information about the processes in the system (QNX Neutrino) pidin使用pidin命令&#xff0c;可以查看Qnx系统运行的进程信息&#xff0c;包括PID、TID、NAME、PRIO(优先级)、STATE…...

基于 Selenium 实现上海大学校园网自动登录

基于 Selenium 实现上海大学校园网自动登录 一、技术方案 核心工具&#xff1a; Selenium&#xff1a;一个用于自动化测试的工具&#xff0c;能够模拟用户在浏览器上的操作。Edge WebDriver&#xff1a;用于控制 Edge 浏览器的驱动程序。 功能设计&#xff1a; 检测网络状…...

相机小孔成像模型与透视变换

0 背景 本文用于记录小孔相机成像的数学模型推导&#xff0c;并讨论特定条件下两个相机之间看到图像的变换关系。 1 小孔成像模型 小孔成像模型如上图所示。物理世界发光点P&#xff0c;经过小孔O投影到物理成像平面&#xff0c;形成像点I’。 简易起见&#xff0c;构造虚拟成…...

微信小程序订阅消息提醒-云函数

微信小程序消息订阅分2种&#xff1a; 1.一次性订阅&#xff1a;用户订阅一次就可以推送一次&#xff0c;如果需要多次提醒需要多次订阅。 2.长期订阅&#xff1a;只有公共服务领域&#xff0c;如政务、医疗、交通、金融和教育等。‌在用户订阅后&#xff0c;在很长一段时间内…...

语音技术与人工智能:智能语音交互的多场景应用探索

引言 近年来&#xff0c;智能语音技术取得了飞速发展&#xff0c;逐渐渗透到日常生活和各行各业中。从语音助手到智能家居控制&#xff0c;再到企业客服和教育辅导&#xff0c;语音交互正以前所未有的速度改变着人机沟通的方式。这一变革背后&#xff0c;人工智能技术无疑是关键…...

ros2笔记-6.2 使用urdf创建机器人模型

本节主要跟着小鱼老师的视频操作&#xff0c;不同的仿真平台有不同的建模语言&#xff0c;但是几乎都支持URDF。 本节使用URDF创建一个机器人模型。 6.2.1 帮机器人创建一个身体 URDF使用XML来描述机器人的结构和传感器、执行器等信息。 在chapt6/chap6_ws/src创建功能包:r…...

SQL刷题快速入门(二)

其他章节&#xff1a;SQL刷题快速入门&#xff08;一&#xff09; 承接上一章节&#xff0c;本章主要讲SQL的运算符、聚合函数、SQL保留小数的几种方式三个部分 运算符 SQL 支持多种运算符&#xff0c;用于执行各种操作&#xff0c;如算术运算、比较、赋值、逻辑运算等。以下…...

大数据技术实训:Zookeeper集群配置

一、本地模式安装部署 1&#xff09;安装前准备 &#xff08;1&#xff09;安装jdk &#xff08;2&#xff09;拷贝Zookeeper安装包到Linux系统下 &#xff08;3&#xff09;解压到指定目录 tar -zxvf zookeeper-3.5.7.tar.gz -C /opt/module/ 2&#xff09;配置修改 &am…...

SpringBoot日常:集成Kafka

文章目录 1、pom.xml文件2、application.yml3、生产者配置类4、消费者配置类5、消息订阅6、生产者发送消息7、测试发送消息 本章内容主要介绍如何在springboot项目对kafka进行整合&#xff0c;最终能达到的效果就是能够在项目中通过配置相关的kafka配置&#xff0c;就能进行消息…...

初学stm32 --- DAC输出三角波和正弦波

输出三角波实验简要&#xff1a; 1&#xff0c;功能描述 通过DAC1通道1(PA4)输出三角波&#xff0c;然后通过DS100示波器查看波形 2&#xff0c;关闭通道1触发(即自动) TEN1位置0 3&#xff0c;关闭输出缓冲 BOFF1位置1 4&#xff0c;使用12位右对齐模式 将数字量写入DAC_…...

从绝对误差到相对误差:C++ 浮点数比较详解

一般情况下,对于比较两个整数的大小关系,我们通常使用简单的比较运算符进行比较即可得出结论; 考虑下面的程序: #include <iostream> #include<cmath> #include <algorithm>int main() {int a {1};int b {2};std::cout << std::boolalpha;std::cout …...

Chrome_60.0.3112.113_x64 单文件版 下载

单文件&#xff0c;免安装&#xff0c;直接用~ Google Chrome, 免費下載. Google Chrome 60.0.3112.113: Chrome 是 Google 開發的網路瀏覽器。它的特點是速度快,功能多。 下载地址: https://blog.s3.sh.cn/thread-150-1-1.htmlhttps://blog.s3.sh.cn/thread-150-1-1.html...

《自动驾驶与机器人中的SLAM技术》ch1:自动驾驶

目录 1.1 自动驾驶技术 1.2 自动驾驶中的定位与地图 1.1 自动驾驶技术 1.2 自动驾驶中的定位与地图 L2 在技术实现上会更倾向于实时感知&#xff0c;乃至可以使用感知结果直接构建鸟瞰图&#xff08;bird eye view, BEV&#xff09;&#xff0c;而 L4 则依赖离线地图。 高精地…...

httpx.AsyncClient报错ProxyError: 504 Gateway Time-out

## 场景&#xff1a; 同一个URL&#xff0c;用requests.get能正常获取网页内容&#xff0c;用httpx.get和httpx.AsyncClient.get就不行&#xff0c;要么就报超时&#xff0c;要么就报ProxyError: 504 Gateway Time-out import anyio, httpx, requestsurl https://my-domain.…...

常见的http状态码 + ResponseEntity

常见的http状态码 ResponseStatus(HttpStatus.CREATED) 是 Spring Framework 中的注解&#xff0c;用于指定 HTTP 响应状态码。 1. 基本说明 HttpStatus.CREATED 对应 HTTP 状态码 201表示请求成功且创建了新的资源通常用于 POST 请求的处理方法上 2. 使用场景和示例 基本…...

完全自定义Qt翻译功能,不使用Qt Linguist的.ts 和 .qm类型翻译

这篇文章展示了集成Qt Linguist 的功能。 但是有时候Qt的翻译功能比较繁琐&#xff0c;我们简单项目只需要使用本地化功能&#xff0c;将中文字符串导入到项目中&#xff0c;避免编码格式问题导致的乱码。 只需要使用一个简单的json或者其他格式的本地文件作为映射的key/value.…...

std::array

std::array 是 C 标准库中的一个容器&#xff0c;定义在 <array> 头文件中。它是一个固定大小的数组容器&#xff0c;封装了 C 风格数组&#xff0c;并提供了更多的功能和安全性。与 C 风格数组相比&#xff0c;std::array 具有以下优点&#xff1a; &#xff08;1&#…...

Go语言中的接收器(Receiver)详解

在 Go 语言中&#xff0c;接收器&#xff08;Receiver&#xff09; 是指在方法声明中与方法绑定的对象。它是 Go 语言实现面向对象编程&#xff08;OOP&#xff09;特性的核心之一。接收器的作用是将方法绑定到某个类型的实例&#xff08;值或者指针&#xff09;&#xff0c;让…...

linux下实现U盘和sd卡的自动挂载

linux下实现U盘和sd卡的自动挂载 Chapter0 linux下实现U盘和sd卡的自动挂载 Chapter0 linux下实现U盘和sd卡的自动挂载 原文链接&#xff1a;https://blog.csdn.net/EmSoftEn/article/details/45099699 目的&#xff1a;使U盘和SD卡在Linux系统中进行插入和拔除时能自动挂载和…...

TVS管工作原理及其选型

工作原理 当TVS管两端的方向电压大于一定值时&#xff0c;TVS会被反向击穿&#xff0c;瞬间形成一个导通回路&#xff0c;将大电流导出&#xff0c;从而将TVS两端的电压控制在一个固定电压&#xff0c;来保护与TVS管并联的电路。 单向&双向TVS工作特性曲线 Vrwm→反向导通…...

Web前端界面开发

前沿&#xff1a;介绍自适应和响应式布局 自适应布局&#xff1a;-----针对页面1个像素的变换而变化 就是我们上一个练习的效果 我们的页面效果&#xff0c;随着我们的屏幕大小而发生适配的效果&#xff08;类似等比例&#xff09; 如&#xff1a;rem适配 和 vw/vh适配 …...

预编译SQL

预编译SQL 预编译SQL是指在数据库应用程序中&#xff0c;SQL语句在执行之前已经通过某种机制&#xff08;如预编译器&#xff09;进行了解析、优化和准备&#xff0c;使得实际执行时可以直接使用优化后的执行计划&#xff0c;而不需要每次都重新解析和编译。这么说可能有一些抽…...

学英语学Elasticsearch:04 Elastic integrations 工具箱实现对第三方数据源的采集、存储、可视化,开箱即用

&#x1f4e2;&#x1f4e2;&#x1f4e2;&#xff1a; 先看关键单词&#xff0c;再看英文&#xff0c;最后看中文总结&#xff0c;再回头看一遍英文原文&#xff0c;效果更佳&#xff01;&#xff01; 关键词 ingestion 摄取 /ɪnˈdʒɛstʃən/ observability 可观察性 …...

【开源免费】基于Vue和SpringBoot的城镇保障性住房管理系统(附论文)

本文项目编号 T 122 &#xff0c;文末自助获取源码 \color{red}{T122&#xff0c;文末自助获取源码} T122&#xff0c;文末自助获取源码 目录 一、系统介绍二、数据库设计三、配套教程3.1 启动教程3.2 讲解视频3.3 二次开发教程 四、功能截图五、文案资料5.1 选题背景5.2 国内…...

HTML和CSS相关的问题,为什么某些元素的字体无法加载?

当你在HTML和CSS中遇到字体无法加载的情况时&#xff0c;通常是由几个常见的问题引起的。以下是一些可能导致字体无法加载的原因&#xff0c;以及如何解决这些问题。 常见原因及解决方法 字体文件路径错误字体格式不兼容缺少字体的font-face声明字体加载顺序问题浏览器缓存问…...

[ Spring ] Install MongoDB on Ubuntu24

文章目录 Disable THP ServiceRemove File and Process Count LimitationEnable Swappiness for MongoDBInstall MongoDBEnable MongoDB ServiceCreate MongoDB Admin UserEnable MongoDB AuthenticationCreate a Normal DatabaseUpdate User RolesInsert DocumentUninstall Mo…...

【Block总结】掩码窗口自注意力 (M-WSA)

摘要 论文链接&#xff1a;https://arxiv.org/pdf/2404.07846 论文标题&#xff1a;Transformer-Based Blind-Spot Network for Self-Supervised Image Denoising Masked Window-Based Self-Attention (M-WSA) 是一种新颖的自注意力机制&#xff0c;旨在解决传统自注意力方法在…...

TensorFlow DAY3: 高阶 API(Keras)

TensorFlow 作为深度学习框架&#xff0c;当然是为了帮助我们更便捷地构建神经网络。所以&#xff0c;本次实验将会了解如何使用 TensorFlow 来构建神经网络&#xff0c;并学会 TensorFlow 构建神经网络的重要函数和方法。 知识点 Keras 顺序模型Keras 函数模型Keras 模型存储…...

【CSS】HTML页面定位CSS - position 属性 relative 、absolute、fixed 、sticky

目录 relative 相对定位 absolute 绝对定位 fixed 固定定位 sticky 粘性定位 position&#xff1a;relative 、absolute、fixed 、sticky &#xff08;四选一&#xff09; top&#xff1a;距离上面的像素 bottom&#xff1a;距离底部的像素 left&#xff1a;距离左边的像素…...

Spring中三级缓存详细讲解

1、Spring三级缓存是什么&#xff0c;过程是怎么样的&#xff1f; Spring 中的三级缓存主要用于单例 Bean 的生命周期管理&#xff0c;特别是在循环依赖时&#xff0c;它通过不同阶段暴露 Bean 实例来确保依赖注入的顺利完成。缓存的内容如下&#xff1a; 一级缓存 (singleton…...

美摄科技PC端视频编辑解决方案,为企业打造专属的高效创作平台

在当今这个信息爆炸的时代&#xff0c;视频已成为不可或缺的重要内容形式&#xff0c;美摄科技推出了PC端视频编辑解决方案的私有化部署服务&#xff0c;旨在为企业提供一款量身定制的高效创作平台。 一、全面功能&#xff0c;满足企业多样化需求 美摄科技的PC端视频编辑解决…...

转运机器人在物流仓储行业的优势特点

在智能制造与智慧物流的浪潮中&#xff0c;一款革命性的产品正悄然改变着行业的面貌——富唯智能转运机器人&#xff0c;它以卓越的智能科技与创新的设计理念&#xff0c;引领着物流领域步入一个全新的高效、智能、无人的时代。 一、解放双手&#xff0c;重塑物流生态 富唯智能…...

《探索鸿蒙Next上开发人工智能游戏应用的技术难点》

在科技飞速发展的当下&#xff0c;鸿蒙Next系统为应用开发带来了新的机遇与挑战&#xff0c;开发一款运行在鸿蒙Next上的人工智能游戏应用更是备受关注。以下是在开发过程中可能会遇到的一些技术难点&#xff1a; 鸿蒙Next系统适配性 多设备协同&#xff1a;鸿蒙Next的一大特色…...

25/1/12 算法笔记 剖析Yolov8底层逻辑

YOLOv8 是一种基于深度学习的目标检测和图像分割模型&#xff0c;属于 YOLO&#xff08;You Only Look Once&#xff09;系列的最新版本。YOLO 系列模型以其高效的实时目标检测能力而闻名&#xff0c;YOLOv8 在此基础上进行了一些优化和改进。 Yolov8的主要特点&#xff1a; …...

JavaScript,ES6,模块化,大程序文件拆分成小文件再组合起来

模块化 模块化是指将一个大的程序文件&#xff0c;拆分成许多小的文件&#xff0c;然后将小文件组合起来。 模块化的好处 模块化的优势有以下几点&#xff1a;1、防止命名冲突&#xff0c;2、代码复用&#xff0c;3、高维护性。 模块化规范产品&#xff0c;ES6 之前的模块化…...

物联网技术入门

在科技日新月异的今天&#xff0c;物联网&#xff08;Internet of Things&#xff0c;简称IoT&#xff09;技术正逐渐渗透到我们生活的方方面面&#xff0c;从智能家居到智慧城市&#xff0c;从工业制造到农业管理&#xff0c;物联网的应用无处不在。那么&#xff0c;什么是物联…...

sequelize-cli 多对多关系处理 及某一单项游戏根据成绩降序排名

一、生成模型 Game(游戏表)GameGrades(游戏成绩表)GameUser&#xff08;用户表&#xff09; 1.1 对非中间表 做多对多逻辑处理 Game模型 static associate(models) {// define association heremodels.GameUser.belongsToMany(models.Game, {through: models.GameGrade,fore…...

人工智能训练师 - 练习题三

一、单选题 201、在人工智能当中&#xff0c;图像、语音、手势等 识别被认为是()的层次;而问题求解、 创作、推理预测被认为是()的层次。A.感知智能&#xff0c;认知智能 B.认知智能&#xff0c;认知智能 C.感知智能&#xff0c;感知智能 D.认知智能&#xff0c;感知智能 202…...

【EI 会议征稿通知】第四届航空航天、空气动力学与机电工程国际学术会议(AAME 2025)

2025 4th International Conference on Aerospace, Aerodynamics and Mechatronics Engineering 重要信息 大会官网&#xff1a;www.ic-aame.org/ 大会时间&#xff1a;2025年4月11-13日 大会地点&#xff1a;中国-南昌 接受/拒稿通知&#xff1a;投稿后1周 收录检索&…...

uniApp通过xgplayer(西瓜播放器)接入视频实时监控

&#x1f680; 个人简介&#xff1a;某大型国企资深软件开发工程师&#xff0c;信息系统项目管理师、CSDN优质创作者、阿里云专家博主&#xff0c;华为云云享专家&#xff0c;分享前端后端相关技术与工作常见问题~ &#x1f49f; 作 者&#xff1a;码喽的自我修养&#x1f9…...

STM32F103的ADC通道映射

ADC通道映射 STM32F103带3个ADC控制器&#xff0c;一共支持23个通道&#xff0c;包括21个外部和2个内部信号源。ADC1控制器最多有18个通道&#xff0c;包括16个外部和2个内部信号源。 ADC1和ADC2的16个外部通道相同&#xff0c;且ADC1和ADC2共用一个系统中断向量&#xff0c;A…...

深入了解OpenStack中的隧道网络

在OpenStack环境中&#xff0c;隧道网络是一项关键技术&#xff0c;它确保了虚拟机之间以及虚拟机与外部网络之间的安全通信。通过隧道机制&#xff0c;我们可以有效地隔离不同租户的流量&#xff0c;并支持多租户环境下的复杂网络需求。之前我们介绍了隧道网络&#xff0c;下面…...

【Rust】函数

目录 思维导图 1. 函数的基本概念 1.1 函数的定义 2. 参数的使用 2.1 单个参数的示例 2.2 多个参数的示例 3. 语句与表达式 3.1 语句与表达式的区别 3.2 示例 4. 带返回值的函数 4.1 返回值的示例 4.2 返回值与表达式 5. 错误处理 5.1 错误示例 思维导图 1. 函数…...

数据结构与算法之链表: LeetCode 19. 删除链表的倒数第 N 个结点 (Ts版)

删除链表的倒数第 N 个结点 https://leetcode.cn/problems/remove-nth-node-from-end-of-list/ 描述 给你一个链表&#xff0c;删除链表的倒数第 n 个结点&#xff0c;并且返回链表的头结点。 示例 1 输入&#xff1a;head [1,2,3,4,5], n 2 输出&#xff1a;[1,2,3,5]示…...