【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数据库的一些基础知识,如果您觉得有用的话,可以点一个关注,让我们一起努力进步吧!!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/953228.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【数学】概率论与数理统计(五)

文章目录 [toc] 二维随机向量及其分布随机向量离散型随机向量的概率分布律性质示例问题解答 连续型随机向量的概率密度函数随机向量的分布函数性质连续型随机向量均匀分布 边缘分布边缘概率分布律边缘概率密度函数二维正态分布示例问题解答 边缘分布函数 二维随机向量及其分布 …

mysql中创建计算字段

目录 1、计算字段 2、拼接字段 3、去除空格和使用别名 &#xff08;1&#xff09;去除空格 &#xff08;2&#xff09;使用别名&#xff1a;AS 4、执行算术计算 5、小结 博主用的是mysql8 DBMS&#xff0c;附上示例资料&#xff1a; 百度网盘链接: https://pan.baidu.co…

uniapp 之 uni-forms校验提示【提交的字段[‘xxx‘]在数据库中并不存在】解决方案

目录 场景问题代码结果问题剖析解决方案 场景 uni-forms官方组件地址 使用uniapp官方提供的组件&#xff0c;某个表单需求&#xff0c;单位性质字段如果是高校&#xff0c;那么工作单位则是高校的下拉选择格式&#xff0c;单位性质如果是其他的类型&#xff0c;工作单位则是手动…

【SH】Xiaomi9刷Windows10系统研发记录 、手机刷Windows系统教程、小米9重装win10系统

文章目录 参考资料云盘资料软硬件环境手机解锁刷机驱动绑定账号和设备解锁手机 Mindows工具箱安装工具箱和修复下载下载安卓和woa资源包第三方Recovery 一键安装Windows准备工作创建分区安装系统 效果展示Windows和Android一键互换Win切换安卓安卓切换Win 删除分区 参考资料 解…

苹果电脑怎么清理后台,提升苹果电脑运行速度

苹果电脑以其流畅的系统和高效的性能备受用户青睐&#xff0c;但即使是性能强大的Mac&#xff0c;随着使用时间的增长&#xff0c;也会遇到运行变慢、卡顿的问题。造成这种现象的一个主要原因是后台运行的程序和进程过多&#xff0c;占用了系统资源。那么&#xff0c;苹果电脑怎…

qt 快捷功能 快速生成 setter getter 构造函数 父类虚函数重写 成员函数实现 代码框架 查看父类及父类中的虚函数

qt 快速生成 setter getter 构造函数 父类虚函数重写 成员函数实现 代码框架 1、找到要实现的头文件 2、鼠标移动到在头文件中的类定义的类名上&#xff0c;右键进行选择。 这是插入父类虚函数(父类虚函数重写) 选项弹出来的结果。可以查看到所有父类及父类中的所有的虚函数

2_CSS3 背景 --[CSS3 进阶之路]

CSS3 中的背景属性提供了许多强大的功能来增强网页设计&#xff0c;包括但不限于多背景图像、渐变、背景大小控制等。以下是一些关键的 CSS3 背景属性及其用法示例。 1. 多重背景图像 CSS3 允许你为一个元素设置多个背景图像。这些图像按照它们在 background-image 属性中定义…

C++ ——— 内部类

目录 内部类的概念 内部类的特征 sizeof(外部类) 的大小 内部类的实例化 内部类就是外部类的友元 内部类的概念 如果一个类定义在另一个类的内部&#xff0c;这个内部类就叫做内部类&#xff0c;内部类是一个独立的类&#xff0c;它不属于外部类&#xff0c;更不能通过外…

03_Redis基本操作

1.Redis查询命令 1.1 官网命查询命令 为了便于学习Redis,官方将其用于操作不同数据类型的命令进行了分类整理。你可以通过访问Redis官方网站上的命令参考页面https://redis.io/commands来查阅这些分组的命令,这有助于更系统地理解和使用Redis的各项功能。 1.2 HELP查询命令…

深度解读微软Speech服务:让语音识别走进现实

大家好&#xff0c;今天我们来探讨一个激动人心的技术话题&#xff1a;微软的语音识别服务如何为我们提供强大的语音识别解决方案&#xff0c;特别是在电话录音中识别出不同的说话人。 场景描绘 想象一下&#xff0c;你有一段电话录音&#xff0c;并需要将其中的多个说话人区分…

mapbox基础,expressions表达式汇总

👨‍⚕️ 主页: gis分享者 👨‍⚕️ 感谢各位大佬 点赞👍 收藏⭐ 留言📝 加关注✅! 👨‍⚕️ 收录于专栏:mapbox 从入门到精通 文章目录 一、🍀前言二、🍀Expressions简介2.1 expressions 操作符2.1.1 Data expressions2.1.2 Camera expressions2.2 Expressi…

HTML中link的用法

一点寒芒先到&#xff0c;随后&#xff0c;抢出如龙&#xff01; 对于本人而言&#xff0c;这篇笔记内容有些扩展了&#xff0c;有些还未学到的也用上了&#xff0c;但是大概可以使用的明白&#xff0c;坚持下去&#xff0c;相信一定可以建设一个稳固的根基。 该文章为个人成…

宝塔面板 申请证书后 仍然提示不安全

证书显示有效&#xff0c;但是网站显示不安全 导致的原因是引入静态文件使用的是HTTP&#xff0c;查看方法为F12打开console控制台 可以看到静态文件全部都是HTTP 网站采用wordpress搭建&#xff0c;基于问题解决&#xff0c;其他方式搭建也是一样&#xff0c;处理掉所有的H…

Maven 中 scope=provided 和 optional=true 的区别

先说效果&#xff0c;maven依赖声明中加了<scope>provided</scope>&#xff0c;或者加了<optional>true</optional>&#xff0c;从效果上看是一样的&#xff0c;都会中断依赖传递&#xff0c;观察下图&#xff1a; 图中&#xff0c;项目B分别依赖了C和…

Linux标准IOday4

1:思维导图2: 创建2个子进程 父进程负责: 向文件中写入数据 2个子进程负责: 从文件中读取数据 要求: 一定保证1号子进程先读取&#xff0c;2号子进程后读取 使用文件IO去实现 #include <stdio.h>#include <string.h>#include <un…

Spring Boot教程之五十五:Spring Boot Kafka 消费者示例

Spring Boot Kafka 消费者示例 Spring Boot 是 Java 编程语言中最流行和使用最多的框架之一。它是一个基于微服务的框架&#xff0c;使用 Spring Boot 制作生产就绪的应用程序只需很少的时间。Spring Boot 可以轻松创建独立的、生产级的基于 Spring 的应用程序&#xff0c;您可…

ColorGATE 23系列的RIP软件

ColorGATE 23系列的RIP软件。ColorGATE是全球领先的用于无化学胶片生产的RIP软件&#xff0c;以下是对其特点和功能的介绍&#xff1a; 应用领域 适用于柔版、胶版和丝网印刷等领域&#xff0c;利用喷墨打印机进行无化学胶片生产&#xff0c;可应用于高端品质的印刷。 核心技…

Type-C双屏显示器方案

在数字化时代&#xff0c;高效的信息处理和视觉体验已成为我们日常生活和工作的关键需求。随着科技的进步&#xff0c;一款结合了便携性和高效视觉输出的设备——双屏便携屏&#xff0c;逐渐崭露头角&#xff0c;成为追求高效工作和娱乐体验人群的新宠。本文将深入探讨双屏便携…

51单片机 DS18B20温度储传感器

DS18B20温度传感器 64-BITROM&#xff1a;作为器件地址&#xff0c;用于总线通信的寻址&#xff0c;是唯一的&#xff0c;不可更改 SCRATCHPAD&#xff08;暂存器&#xff09;&#xff1a;用于总线的数据交互 EEPROM&#xff1a;用于保存温度触发阈值和配置参数 暂存器 单总线…

对话新晋 Apache SeaTunnel Committer:张圣航的开源之路与技术洞察

近日&#xff0c;张圣航被推选为 Apache SeaTunnel 的 Committer成员。带着对技术的热情和社区的责任&#xff0c;他将如何跟随 Apache SeaTunnel 社区迈向新的高度&#xff1f;让我们一起来聆听他的故事。 自我介绍 请您简单介绍一下自己&#xff0c;包括职业背景、当前的工作…