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

MySQL再次基础 向初级工程师迈进

作者:在计算机行业找不到工作的大四失业者

Run run run ! ! !  

1、MySQL概述

 1.1数据库相关概念

  1.2MySQL数据库

2、SQL

 2.1SQL通用语法

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

2.2 DDL 

数据定义语言

表的创建

 通过desc 查看表

通过show create table 来查询建表语句 。

 对于ENGINE=InnoDB,这个会在之后详细的讲解;CHARSET = utf8MB4 就是默认的字符集;COLLATE是它的一个排序规则。

数据类型

数值类型: 

字符串类型: 

日期类型: 

测试(根据需求创建表设计合理的数据类型和长度):

create table emp(id int comment '编号',workno varchar(10) comment '员工工号',workname varchar(10) comment '员工姓名',gender char(1) comment '性别',age tinyint unsigned comment '年龄',idcard char(18) comment '身份证号',entrydata date comment '入职时间'
)comment '员工表';

可以通过desc查看表的结构:
 

 查看建表语句,通过show create table

 DDL-表操作-修改

添加字段:

alter table emp add nickname varchar(20) comment '昵称';

 修改字段:

① 修改字段类型:

alter table emp modify nickname varchar(30);

② 修改字段名和字段类型:

alter table emp change nickname username varchar(30) comment '用户名';

将emp表的nickname字段修改为udername,类型为varchar(30)

删除字段:

alter table emp drop username;

将emp中的字段username删除。

修改表名:

alter table emp rename to employee;

将表名字修改为employee。 

 删除表:

drop table 表名;

2.3 DML

用于完成数据的增删改

  • insert 添加数据
  • update 修改数据
  • delete 删除数据

添加数据:

insert into employee values(1, '1', 'Itcast', '男', 10, '123456789101', '2000-01-01');

修改数据:

-- 修改id为1 的数据,将name修改为cce

update employee set workname = 'cce' where id = 1;
select * from employee;


-- 修改id为1 的数据,将name修改为cce,gender 修改为女

update employee set workname = 'cce', gender = '女' where id = 1;
select * from employee;


-- 将所有的员工入职日期修改为2008-01-01

SET SQL_SAFE_UPDATES = 0;
update employee set entrydata = '2008-01-01';
select * from employee;

删除数据:

insert into employee values(2, '2', 'cce1', '男', 10, '123456789134', '2004-01-01');
delete from employee where gender = '女';
select * from employee;

2.4 DQL

DQL英文全称是Data Query Language(数据查询语言),数据查询语言,用来查询数据库中表的记录。查询关键字:SELECT。

2.4.1基本查询


-- 1.查询指定字段 name,workno,age 返回

select workname, workno, age from emp; 

-- 2.查询所有字段返回

select * from emp; 

-- 3.查询所有员工的工作地址,起别名

select workaddress as '工作地址' from emp; 

-- 4.查询公司员工的上班地址(不要重复)

select distinct workaddress as '工作地址' from emp; 

2.4.2 条件查询 where

--1.查询年龄等于 88 的员工

select * from emp where age = 88;

--2.查询年龄小于 20 的员工信息

select * from emp where age < 20;

--3.查询年龄小于等于 20 的员工信息

select * from emp where age <= 20;

--4.查询没有身份证好的员工信息

select * from emp where idcard is null;

--5.查询有身份证号的员工信息

select * from emp where idcard is not null;

--6.查询年龄不等于 88 的员工信息

select * from emp where age !=88;

--7.查询年龄在15岁(包含)到20岁(包含)之间的员工信息

select * from emp where age >=15 and age <=20;

--8.查询性别为女且年龄小于 25岁的员工信息

select * from emp where gender = '女' and age <25;

--9,查询年龄等于18或20或40 的员工信息

select * from emp where age in(18,20,40);

--10.查询姓名为两个字的员工信息

select * from emp where workname like '__';

-- 11.查询身份证号最后一位是X的员工信息

select * from emp where idcard like '%X';

2.4.3 聚合函数 count max min avg sum

-- 1.统计该企业员工数量

select count(*) from emp;

-- 2.统计该企业员工的平均年龄

select avg(age) from emp;

-- 3.统计该企业员工的最大年龄

select max(age) from emp;

-- 4.统计该企业员工的最小年龄

select min(age) from emp;

-- 5.统计西安地区员工的年龄之和

select sum(age) from emp where workaddress = '西安';

2.4.4分组查询 group by

-- 1. 根据性别分组,统计性员工和女性员工的数量。

select gender, count(*) from emp group by gender;

-- 2. 根据性别分组,统计男性员工和女性员工的平均年龄。

select gender, avg(age) from emp group by gender;


-- 3. 查询年龄小于45的员工 ,并根据工作地址分组,获取员工数量大于等于3的工作地址。

select workaddress, count(*) 
from emp 
where age < 45 
group by workaddress 
having count(*) >= 3; 

在分组之间过滤使用where,在分组之后过滤使用having。

2.4.5排序查询 oder by

-- 1.根据年龄对公司的员工进行升序排序

select * from emp oder by age asc;

-- 2.根据入职时间,对员工进行降序排序

select * from emp oder by netrydate desc;

-- 3.根据年龄对公司的员工进行升序排序,年龄相同,再按照入职时间进行降序排序

select * from emp oder by age asc, entrydate desc;

2.4.6分页查询 limit

--1.查询第1页员工数据,每页展示10条记录

select * from emp limit 0,10;

也可以下面的

select * from emp limit 10;

--2.查询第2页员工数据,每页展示10条记录

select * from emp limit 10,10;

2.4.7 DQL语句的总结测试

1.查询年龄为20,21,22,23岁的女性员工信息。

select * from emp where gender = '女' and age in(20,21,22,23);

2.查询性别为男 ,并且年龄在 20-40 岁(含)以内的姓名为三个字的员工。

select * from emp 
where gender = '男' 
and age >=40 
and age <=40 
and workname like '___';

3.统计员工表中,年龄小于60岁的,男性员工和女性员工的人数。

select gender, count(*) 
from emp 
where age<60 
group by gender;

4.查询所有年龄小于等于35岁员工的姓名和年龄,并对查询结果按年龄升序排序,如果年龄相同按入职时间降序排序。

select workname, age from emp 
where age <= 35
order by age asc, entrydate desc; 

5、查询性别为男,且年龄在20-40 岁(含)以内的前5个员工信息,对查询的结果按年龄升序排序,年龄相同按入职时间升序排序。

select * from emp 
where gender = '男'
and age between 20 and 40
order by age asc, entrydate asc
limit 5;

2.4.8 DQL的执行顺序

2.5 DCL

管理用户:

在mysql中,其用户所拥有的权限信息都存放在系统数据库sysql中的user表

其user表中的内容如下

创建用户 itcast ,只能够在当前主机localhost访问,密码123456;

create user "itcast'@'localhost' identified by'123456';

创建用户 heima ,可以在任意主机访问该数据库,密码123456;

create user 'heima'@'%'identified by'123456';

修改用户 heima 的访问密码为1234;

alter user 'heima'@'%'identified with mysql_native_password by '1234';

删除itcast@localhost用户

drop user 'itcast'@'localhost;

权限控制:

--查询权限
show grants for 'heima'@'%';--授子权限
grant all on itcast.* to 'heima'@'%';-撤销权限
revoke all on itcast.* from 'heima'@'%';

3、函数

函数:是指一段可以直接被另一段程序调用的程序或代码。

字符串函数:

--concat
select concat('Hello',· MySQL');--lower
select lower('Hello');--upper
select upper('Hello');--lpad将01填充到长度为5,使用-填充,结果:---01
select lpad('01',5,'-');--rpad将01填充到长度为5,使用-填充,结果:01---
select lpad('01',5,'-');--trim只去除头部和尾部的空格
select trim(' Hello MySQL ');--substring,结果是Hello
select trim('Hello MySQL', 1, 5);

由于业务需求变更,企业员工的工号,统一为5位数,目前不足5位数的全部在前面补0。比如:1号员工的工号应该为00001.

update emp 
set workno = lpad(workno,5,'0');

数值函数:
 

通过数据库的函数,生成一个六位数的随机验证码, 

select lpad(round(rand()*1000000, 0), 6, '0');

日期函数:

 案例:查询所有员工的入职天数,并根据入职天数倒序排序。

select name, datediff(curdate(),entrydate) from emp;

流程控制函数:

case when then else end
-- 需求:查询emp表的员工姓名和工作地址(北京上海---->一线城市,其他----> 二线城市)

select
name
( case workaddress when '北京' then '一线城市' when '上海' then '一线城市' else '二线城市' end ) as '工作地址'
from emp; 

函数测试: 

4、约束

概念:

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

约束演示:

依次使用的约束:

  • primary key, auto_increment
  • not null, unique
  • check
  • default
create table user(id int primary key auto_increment comment '主键',name varchar(10) not null nique comment '姓名',age int check( age> 0 && age <= 120 ) comment '年龄',status char(1) default '1' comment '状态',gender char(1) comment '性别'
)comment '用户表';

外键约束:

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

注意 : 目前上述的两张表,在数据库层面,并未建立外键关联,所以是无法保证数据的一致性和完整性的。 

5、多表查询

5.1多表关系

5.2多表查询概述

消除笛卡尔积

select * from emp, dept 
where emp.dept_id = dept.id;

 多表查询的分类:

5.3内连接

两张表的交集

-- 1.查询每一个员工的姓名,及关联的部门的名称(隐式内连接实现)

select emp.name, dept.name 
from emp, dept 
where emp.dept_id = dept.id;

-- 2.查询每一个员工的姓名,及关联的部门的名称(显式内连接实现)

select * from emp inner join dept 
on emp.dept_id = dept.id;

其中inner关键字可以被省略。

5.4外连接

--1.查emp表的所有数据,和对应的部门信息(左外连接)

select emp.*, dept.name from emp 
left outer join dept 
on emp.dept_id = dept.id;

左外连接会完全包含左表的信息。outer可以被省略。

--2.查询dept表的所有数据,和对应的员工信息(右外连接)

select dept.*, emp.* from emp 
right outer join dept 
on emp.dept_id = dept.id;

右外连接会完全包含右表的信息。outer可以被省略。

5.5自连接

-- 1.查询员工及其所属领导的名字

select e1.name, e2.name from emp e1, emp e2 
where e1.managerid = e2.id;

-- 2.查询所有员工emp及其领导的名字emp,如果员工没有领导,也需要查询出来

select e1.name, e2.name from emp e1 
left join emp e2 
on e1.managerid = e2.id;

5.6联合查询

-- 1、将薪资低于5000的员工,和年龄大于50 岁的员工全部查询出来

select * from emp where salary < 5000
union all
select * from emp where age > 50;

union 会去重。同时注意union的时候字段需要相同,两个合并的字段一致

5.7 子查询

标量子查询

-- 1.查询“销售部”的所有员工信息

--查询销售部门的id
select id from dept where name = "销售部"; --根据销售部门id信息再去查询员工信息
select * from emp where dept_id = "4";

合起来:

select * from emp 
where dept_id = (select id from dept where name = "销售部");

-- 2.查询在"方东白”入职之后的员工信息

--查询东方白入职之后的员工信息
select entrydate from emp where name = "方东白";--查询指定入职日期之后入职的员工信息
select * from emp where entrydate > '2009-02-12';

合起来:

select * from emp 
where entrydate > (select entrydate from emp where name = "方东白");

列子查询:

-- 1.查询“销售部”和“市场部”的所有员工信息

select * from emp 
where dept_id 
in (select id from dept where name = "销售部" or name = "市场部");

-- 2.查询比财务部所有人工资都高的员工信息

--先找到财务部的id
select id from dept where name = "财务部";--再找到财务部所有人的薪水
select salary from emp 
where dept_id = (select id from dept where name = "财务部");--再找比财务部所有人工资都高的员工信息
select * from emp 
where salary > all(select salary 
from emp where dept_id = (select id 
from dept where name = "财务部"));

-- 3.查询比研发部其中任意一人工资高的员工信息

--找到研发部门的id
select id from dept where name = "研发部门";--找到研发部门所有人的薪水
select salary from emp 
where dept_id = (select id from dept where name = "研发部门");--找到比研发部门其中任意一个人工资高的员工信息
select * from emp where salary > any(select salary from emp 
where dept_id = (select id from dept where name = "研发部门"));

行子查询:

--1.查询与“张无忌”的薪资及直属领导相同的员工信息

--查询张无忌的薪资极其直属领导
select salary, manager_id 
from emp 
where name = "张无忌";--薪资极其直属领导相同的员工信息
select * from emp 
where (salary,manager_id) = (select salary,manager_id 
from emp 
where name = "张无忌")

表子查询:

-- 1.查询与“鹿杖客",“宋远桥”的职位和薪资相同的员工信息

--查询鹿杖客和宋远桥的职位和薪资
select job,salary from emp 
where name = "鹿杖客" or name = "宋远桥";--查询鹿杖客和宋远桥的职位和薪资相同的员工信息
select *from emp where (job,salary) 
in (select job,salary from emp 
where name = "鹿杖客" or name = "宋远桥")

-- 2.查询入职日期是“2006-01-01”之后的员工信息,及其部门信息

--查入职是“2006-01-01”之后的员工信息
select * from emp where entrydate > '2006-01-01';--查入职是“2006-01-01”之后的员工信息极其部门
select * from 
(select * from emp where entrydate > '2006-01-01') e left join dept 
on e.dept_id = dept.id;

6、事务

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

例如银行转账:

事务操作:

--设置为手动提交set
@autocommit =0;--转账操作(张三给李四转账1000)--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;

事务的四大特定:

  • 原子性(Atomicity):事务是不可分割的最小操作单元,要么全部成功,要么全部失败。
  • 一致性(Consistency):事务完成时,必须使所有的数据都保持一致状态。
  • 隔离性(lsolation):数据库系统提供的隔离机制,保证事务在不受外部并发操作影响的独立环境下运行。
  • 持久性(Durability):事务一旦提交或回滚,它对数据库中的数据的改变就是永久的。

并发事务问题:

事务的隔离级别:

至此你已经成为了一名初级工程师。

山高路远,别太功利导致忘了欣赏路边的风景!

享受它,感受自己的进步.........

2025/3/13

相关文章:

MySQL再次基础 向初级工程师迈进

作者&#xff1a;在计算机行业找不到工作的大四失业者 Run run run ! ! ! 1、MySQL概述 1.1数据库相关概念 1.2MySQL数据库 2、SQL 2.1SQL通用语法 SQL语句可以单行或多行书写&#xff0c;以分号结尾。SQL语句可以使用空格/缩进来增强语句的可读性。MySQL数据库的SQL语句不区…...

使用 Doris 和 Hudi

作为一种全新的开放式的数据管理架构&#xff0c;湖仓一体&#xff08;Data Lakehouse&#xff09;融合了数据仓库的高性能、实时性以及数据湖的低成本、灵活性等优势&#xff0c;帮助用户更加便捷地满足各种数据处理分析的需求&#xff0c;在企业的大数据体系中已经得到越来越…...

Linux———迷你在线商城

一、项目简介 1、演示视频 商城项目演示视频 2、功能概述 用户认证管理&#xff1a;支持用户注册、登录和注销操作&#xff0c;通过SQLite数据库存储用户信息&#xff08;如用户名和密码&#xff09;&#xff0c;确保用户数据的安全性和完整性。 商品展示&#xff1a;能够根据…...

城市林业的无声革命:人工智能与古老生态学如何重新设计城市

城市林业的无声革命&#xff1a;人工智能与古老生态学如何重新设计城市 在摩天大楼的阴影下&#xff0c;一场静悄悄的变革正在发生——它融合了硅芯片与古老根系&#xff0c;算法与原住民智慧。 作者&#xff1a;保罗桑杜 作者利用 PicLumen 创建的图像 城市森林不再只是城市…...

Linux第七讲:基础IO

Linux第七讲&#xff1a;基础IO 1.什么是文件2.文件操作的复习2.1文件基本操作复习2.2将信息输出到显示器&#xff0c;你有哪种方法2.3stdin、stdout、stderror2.4细节问题讲解 3.系统文件IO3.1open函数使用3.1.1理解标志位3.1.2权限问题3.1.3write和read接口介绍3.1.4谈谈fd以…...

【GIT】重新初始化远程仓库

有的时候我们克隆远端仓库会出错&#xff1a; git clone --depth 1 git116.*.*.*:/srv/customs.git D:\dev\projects\kdy\customs11\customs Cloning into D:\dev\projects\kdy\customs11\customs... remote: Enumerating objects: 1494, done. remote: Counting objects: 100…...

力扣热题 100:多维动态规划专题经典题解析

系列文章目录 力扣热题 100&#xff1a;哈希专题三道题详细解析(JAVA) 力扣热题 100&#xff1a;双指针专题四道题详细解析(JAVA) 力扣热题 100&#xff1a;滑动窗口专题两道题详细解析&#xff08;JAVA&#xff09; 力扣热题 100&#xff1a;子串专题三道题详细解析(JAVA) 力…...

【Unity】在项目中使用VisualScripting

1. 在packagemanager添加插件 2. 在设置中进行初始化。 Edit > Project Settings > Visual Scripting Initialize Visual Scripting You must select Initialize Visual Scripting the first time you use Visual Scripting in a project. Initialize Visual Scripting …...

Pytest自动化测试框架pytest-xdist分布式测试插件

平常我们功能测试用例非常多时&#xff0c;比如有1千条用例&#xff0c;假设每个用例执行需要1分钟&#xff0c;如果单个测试人员执行需要1000分钟才能跑完&#xff1b; 当项目非常紧急时&#xff0c;会需要协调多个测试资源来把任务分成两部分&#xff0c;于是执行时间缩短一…...

文件解析漏洞靶场解析全集详解

lls解析漏洞 目录解析 在网站的下面将一个1.asp文件夹&#xff0c;在里面建一个2.txt文件在里面写入<% -now()%>这个显示时间的代码&#xff0c;再将文件名改为2.jpg。 发现2.jpg文件以asp形式执行 畸形文件解析 将2.jpg文件移到网站的下面与1.asp并列&#xff0c;将名…...

C语言数据结构:数组

1. 数组&#xff08;Array&#xff09; 1.1 定义 数组是一种线性数据结构&#xff0c;由相同类型的元素组成&#xff0c;这些元素在内存中按顺序存储。数组的大小在声明时确定&#xff0c;且不可动态改变。 1.2 类型细分 根据维度和用途&#xff0c;数组可以分为以下几种类型…...

LeetCode-移动零

一、题目描述 给定一个数组 nums&#xff0c;编写一个函数将所有 0 移动到数组的末尾&#xff0c;同时保持非零元素的相对顺序。 请注意 &#xff0c;必须在不复制数组的情况下原地对数组进行操作。 示例 1: 输入: nums [0,1,0,3,12] 输出: [1,3,12,0,0]示例 2: 输入: nums […...

PDF Reader

Acrobat Reader...

孔夫子根剧关键字获取在售商品 API

要使用孔夫子旧书网根据关键字获取在售商品的 API&#xff0c;需要以下步骤1&#xff1a; 注册与认证&#xff1a;在孔夫子旧书网的开发者平台注册一个账号&#xff0c;登录后创建一个新的应用&#xff0c;以获取 API 密钥&#xff08;key&#xff09;和调用密钥&#xff08;s…...

Qt的QToolButton设置弹出QMenu下拉菜单

在Qt中&#xff0c;使用QToolButton显示下拉菜单可以通过以下步骤实现&#xff1a; 基本实现步骤 创建QToolButton&#xff1a;实例化一个QToolButton对象。创建QMenu&#xff1a;实例化一个QMenu作为下拉菜单。添加菜单项&#xff1a;通过QMenu::addAction方法添加动作&…...

【一次成功】Win10本地化单机部署k8s v1.31.2版本及可视化看板

【一次成功】Win10本地化单机部署k8s v1.31.2版本及可视化看板 零、安装清单一、安装Docker Desktop软件1.1 安装前<启用或关闭Windows功能> 中的描红的三项1.2 查看软件版本1.3 配置Docker镜像 二、更新装Docker Desktop三、安装 k8s3.1 点击启动安装3.2 查看状态3.3 查…...

Elasticsearch Java High Level Client [7.17] 使用

es 的 HighLevelClient存在es源代码的引用&#xff0c;结合springboot使用时&#xff0c;会存在es版本的冲突&#xff0c;这里记录下解决冲突和使用方式&#xff08;es已经不建议使用这个了&#xff09;。 注意es服务端的版本需要与client的版本对齐&#xff0c;否则返回数据可…...

Vue项目搜索引擎优化(SEO)终极指南:从原理到实战

文章目录 1. SEO基础与Vue项目的挑战1.1 为什么Vue项目需要特殊SEO处理&#xff1f;1.2 搜索引擎爬虫工作原理 2. 服务端渲染&#xff08;SSR&#xff09;解决方案2.1 Nuxt.js框架实战原理代码实现流程图 2.2 自定义SSR实现 3. 静态站点生成&#xff08;SSG&#xff09;技术3.1…...

LeetCode:93. 复原 IP 地址(DFS Java)

目录 93. 复原 IP 地址 题目描述&#xff1a; 实现代码与解析&#xff1a; DFS 原理思路&#xff1a; 93. 复原 IP 地址 题目描述&#xff1a; 有效 IP 地址 正好由四个整数&#xff08;每个整数位于 0 到 255 之间组成&#xff0c;且不能含有前导 0&#xff09;&#xf…...

Spring Boot 中实现全局 Token 验证的两种方式

文章目录 学习文章&#xff1a;Spring Boot 中实现全局 Token 验证的两种方式 一、为什么需要全局 Token 验证&#xff1f;二、使用拦截器实现全局 Token 验证1. 创建 Token 验证拦截器2. 注册拦截器3. 测试拦截器 三、使用过滤器实现全局 Token 验证1. 创建 Token 验证过滤器2…...

【性能测试】Jmeter下载安装、环境配置-小白使用手册(1)

本篇文章主要包含Jmeter的下载安装、环境配置 添加线程组、结果树、HTTP请求、请求头设置。JSON提取器的使用&#xff0c;用户自定义变量 目录 一&#xff1a;引入 1&#xff1a;软件介绍 2&#xff1a;工作原理 3&#xff1a;安装Jmeter 4&#xff1a;启动方式 &#xf…...

【Matlab仿真】如何解决三相交流信号源输出波形失真问题?

问题描述 如标题所示&#xff0c;在搭建simulink模型过程中&#xff0c;明明模型搭建的没有问题&#xff0c;但是输出的波形却不是理想的正弦波&#xff0c;影响问题分析。 问题分析 以三相交流信号源输出波形为例&#xff0c;输出信号理应为三相正弦量&#xff0c;但是仿真…...

Fiora聊天系统本地化部署:Docker搭建与远程在线聊天的实践指南

文章目录 前言1.关于Fiora2.安装Docker3.本地部署Fiora4.使用Fiora5.cpolar内网穿透工具安装6.创建远程连接公网地址7.固定Uptime Kuma公网地址 前言 这个通讯软件泛滥的时代&#xff0c;每天都在刷着同样的朋友圈、看着千篇一律的表情包&#xff0c;是不是觉得有点腻了&#…...

metersphere接口测试(1)使用MeterSphere进行接口测试

文章目录 前言接口文档单接口测试环境配置梳理接口测试场景测试接口 接口自动化怎么写复用性高的自动化测试用例 总结 前言 大汉堡工作第203天&#xff0c;本篇记录我第一次接触接口测试任务&#xff0c;最近有些懈怠啊~ 接口文档 首先就是接口地址&#xff0c;接口测试时用…...

【实战ES】实战 Elasticsearch:快速上手与深度实践-8.2.2成本优化与冷热数据分离

&#x1f449; 点击关注不迷路 &#x1f449; 点击关注不迷路 &#x1f449; 点击关注不迷路 文章大纲 8.2.2AWS OpenSearch Serverless 成本优化与冷热数据分离深度实践1. 成本构成分析与优化机会识别1.1 Serverless模式成本分布1.2 冷热数据特征分析数据特征矩阵 2. 冷热数据…...

MTK Android12 安装app添加密码锁限制

提示&#xff1a;通过安装前输入密码的需求&#xff0c;来熟悉了解PMS 基本的安装流程 文章目录 一、需求实现需求原因提醒 二、UML图-类图三、参考资料四、实现效果五、需求修改点修改文件及路径具体修改内容 六、源码流程分析PMS的复杂性代码量实现aidl 接口PackageManagerSe…...

Redis 集合(Set)

Redis 集合(Set) Redis 是一款高性能的键值数据库,以其高性能、易用性以及丰富的数据结构而广受欢迎。在 Redis 中,集合(Set)是一种重要的数据结构,它支持多种操作,如添加、删除、查找元素,以及集合间的运算。本文将详细介绍 Redis 集合的特点、操作和应用场景。 Redi…...

[数据结构]堆详解

目录 一、堆的概念及结构 二、堆的实现 1.堆的定义 2堆的初始化 3堆的插入 ​编辑 4.堆的删除 5堆的其他操作 6代码合集 三、堆的应用 &#xff08;一&#xff09;堆排序&#xff08;重点&#xff09; &#xff08;二&#xff09;TOP-K问题 一、堆的概念及结构 堆的…...

基于Python+Vue开发的旅游景区管理系统源码+运行步骤

项目简介 该项目是基于PythonVue开发的旅游景区管理系统&#xff08;前后端分离&#xff09;&#xff0c;这是一项为大学生课程设计作业而开发的项目。该系统旨在帮助大学生学习并掌握Python编程技能&#xff0c;同时锻炼他们的项目设计与开发能力。通过学习基于Python的旅游景…...

SpringBoot使用Logback日志框架与综合实例

日志框架的使用,系列文章: 《SpringBoot使用Logback日志框架与综合实例》 《SpringBoot使用@Slf4j注解实现日志输出》 《Log4j2日志记录框架的使用教程与简单实例》 《SpringBoot使用AspectJ实现AOP记录接口:请求日志、响应日志、异常日志》 《SpringBoot使用AspectJ的@Arou…...