【MySQL】增删改查进阶

目录

 一、数据库约束

约束类型

NULL约束:非空约束

UNIQUE:唯一约束

DEFAULT:默认值约束

PRIMARY KEY:主键约束

FOREIGN KEY:外键约束

二、表的设计

三、新增

四、查询

聚合查询

聚合函数

GROUP BY子句

HAVING

联合查询

内连接

外连接

自连接

子查询

合并查询


一、数据库约束

数据库中的数据是如此重要,因此我们希望数据库里的数据,不要存在一些 "错误的" 数据。数据库中的 "约束'',其实就是对于数据库存储的数据,做出一些 "限制" "要求”。负责插入数据的程序员,得确保插入的数据是靠谱的,而人是不靠谱的,机器靠谱,程序靠谱。约束,就是数据库这样的程序,对于保存的数据,进行合法性检查这样的机制,一旦发现问题,数据库程序就能及时给出反馈。

约束类型

● NOT NULL - 指示某列不能存储NULL值。
● UNIQUE - 保证某列的每行必须有唯一的值。
● DEFAULT - 规定没有给列赋值时的默认值。
● PRIMARY KEY-NOT NULL 和 UNIQUE 的结合。确保某列(或两个列多个列的结合)有唯一标
识,有助于更容易更快速地找到表中的一个特定的记录。
● FOREIGN KEY - 保证一个表中的数据匹配另一个表中的值的参照完整性。
● CHECK - 保证列中的值符合指定的条件。对于 MySQL 数据库,对 CHECK 子句进行分析,但是忽略 CHECK 子句。

NULL约束:非空约束

创建表时,可以指定某列不为空:

--重新设置学生表结构
DROP TABLE IF EXISTS student;
CREATE TABLE student (
id INT NOT NULL,
sn INT,
name VARCHAR(20),
qq_mail VARCHAR(20)
);


UNIQUE:唯一约束

指定 sn 列为唯一的、不重复的:

--重新设置学生表结构
DROP TABLE IF EXISTS student;
CREATE TABLE student (
id INT NOT NULL,
sn INT UNIQUE,
name VARCHAR(20),
qq_mail VARCHAR(20)
);

DEFAULT:默认值约束

指定插入数据时,name列为空,默认值unkown:

--重新设置学生表结构
DROP TABLE IF EXISTS student;
CREATE TABLE student (
id INT NOT NULL,
sn INT UNIQUE,
name VARCHAR(20) DEFAULT 'unkown',
qq_mail VARCHAR(20)
);

 

最初的默认值都是NULL

PRIMARY KEY:主键约束

指定 id 列为主键:

-- 重新设置学生表结构
DROP TABLE IF EXISTS student;
CREATE TABLE student (
id INT NOT NULL PRIMARY KEY,
sn INT UNIQUE,
name VARCHAR(20) DEFAULT 'unkown',
qq_mail VARCHAR(20)
);

对于整数类型的主键,常配搭自增长 auto_increment 来使用。插入数据对应字段不给值时,使用最大值+1。

-- 主键是 NOT NULL 和 UNIQUE 的结合,可以不用 NOT NULL

id INT PRIMARY KEY auto_increment

也能手动指定其他数值

接下来插入的时候,自动分配下一条记录是 5 ?还是 101 ?

在MySQL中,给每个表都记录了一个 "自增主键的最大值'',后续继续插入数据,无论之前的最大值是否仍然存在,都是根据之前保存的最大值继续往后分配的。


约定了这个表里某个列为 "身份标识"(非空且唯一)

不允许一个表中同时存在多个主键(多个身份标识)

FOREIGN KEY:外键约束

外键用于关联其他表的 主键 或 唯一键,语法:

foreign key (字段名) references 主表(列)

👁‍🗨案例

● 创建班级表 classes,id 为主键:

-- 创建班级表,有使用MySQL关键字作为字段时,需要使用``来标识
DROP TABLE IF EXISTS classes;
CREATE TABLE classes (
id INT PRIMARY KEY auto_increment,
name VARCHAR(20),
`desc` VARCHAR(100)
);

● 创建学生表 student,一个学生对应一个班级,一个班级对应多个学生。使用 id 为主键,classes_id 为外键,关联班级表 id:

-- 重新设置学生表结构
DROP TABLE IF EXISTS student;
CREATE TABLE student (
id INT PRIMARY KEY auto_increment,
sn INT UNIQUE,
name VARCHAR(20) DEFAULT 'unkown',
qq_mail VARCHAR(20),
classes_id int,
FOREIGN KEY (classes_id) REFERENCES classes(id)
);

涉及到两个表

没有指定约束之前

指定约束之后

此时,外键约束就出现了,往 student 表插入的时候会触发针对 class 表的查询,再次往 student中插入数据,就务必要确保插入的数据的 classld 的值,得在class表中存在。

如果父表中的某个记录,被子表引用了(classld=1),此时就不能删除/修改父表中的对应记录了,父表是约束了子表,子表也会对父表反向进行约束。学生表的 classld 列,引用自班级表的 classld 列,班级表中的数据,约束了/制约了学生表的数据。

删表的时候还需要确保先删除子表再删除父表

再创建表

为啥第一次能行,第二次就不行了?第一次和第二次,差别在哪里呢?指定外键的时候,后续往子表中插入数据,就需要查询父表,第二次没有给父表加主键。主键本身也是有 "唯一性要求的",频繁触发查询,此处数据库就会对主键约束,给出特殊的处理(数据库会针对主键列创建索引),加快查询速度

如果不指定主键,是一个 unique,也能达成类似的效果,都是要自动建立索引,以便于后续的快速查询。

关于外键还有一个更复杂一点的情况.

二、表的设计

一对一

一对多

多对多

三、新增

插入查询结果

INSERT INTO table_name [(column [, column ...])] SELECT ...

👁‍🗨案例:创建一张用户表,设计有name姓名、email邮箱、sex性别、mobile手机号字段。需要把已有的学生数据复制进来,可以复制的字段为 name、qq_mail

-- 创建用户表
DROP TABLE IF EXISTS test_user;
CREATE TABLE test_user (
id INT primary key auto_increment,
name VARCHAR(20) comment '姓名',
age INT comment '年龄',
email VARCHAR(20) comment '邮箱',
sex varchar(1) comment '性别',
mobile varchar(20) comment '手机号'
);
-- 将学生表中的所有数据复制到用户表
insert into test_user(name, email) select name, qq_mail from student;

得到的结果集合,列数/类型/顺序要和 insert into 后面的表相匹配,列的名字是不要求相同的

发现顺序不匹配的话可以通过指定列方式插入

或者

四、查询

聚合查询

针对行和行之间进行 “聚合操作”

聚合函数

进行聚合查询需要搭配聚合函数

函数说明
COUNT([DISTINCT] expr)

返回查询到的数据的数量(行数)

如果使用 count 等聚合函数的时候,cout 和()之间加上空格,此时就会使函数执行失败

如果数据中包含了 null,可能对上述 count 产生影响

在刚刚统计行数的时候虽然这个表里有一条记录,含有 null,但最终查询到的行数还是会把这个
记录算进去的

如果是以 select+列名 的方式,那么遇到空值,就不会进行计数

函数说明
SUM([DISTINCT] expr)返回查询到的数据的总和,不是数字没有意义

可以针对某一列进行求和

需要确保进行求和的列是数字,如果是字符串,就会出现问题

这里只有 6 个警告,因为有一条的 name 为空。null 和其他数值进行各种运算,结果都是 null,但是在 sum 中比较特殊,遇到 null 会直接跳过,不参与运算

函数说明
AVG([DISTINCT] expr)返回查询到的数据的平均值,不是数字没有意义
MAX([DISTINCT] expr)返回查询到的数据的最大值,不是数字没有意义
MIN([DISTINCT] expr)返回查询到的数据的最小值,不是数字没有意义

其实MySQL中还提供更复杂的聚合函数,还能算标准差,方差等…

GROUP BY子句

SELECT中使用GROUP BY子句可以对指定列进行分组查询。需要满足:使用GROUP BY进行分组查询时,SELECT指定的字段必须是“分组依据字段”,其他字段若想出现在SELECT中则必须包含在聚合函数中


针对上述分组结果,也是可以排序的

HAVING

GROUP BY子句进行分组以后,需要对分组结果再进行条件过滤时,不能使用WHERE语句,而需要用HAVING

⚠️需要区分好条件是分组之前的(使用原始数据比较)还是分组之后的(使用统计数据比较)

👁‍🗨案例

(1)分组之前的条件

查询每个岗位的平均薪资但是去除张三这个人

(2)分组之后的条件

排除薪资低于 5000 的记录

(3)一个查询,可以同时包含,分组前的条件和分组后的条件
统计每个岗位平均薪资,排除张三,也排除平均值低于 5w 的结果

联合查询

实际开发中往往数据来自不同的表,所以需要多表联合查询。多表查询是对多张表的数据取笛卡尔积
 

进行多表查询的时候通常会通过一定的条件,把这里笛卡尔积中的 "合法数据” 筛选出来,这样的条件就称为 "连接条件”。如果拿两个表,这里不存在某个列,具有上述的对应关系,此时进行的笛卡尔积可以认为是 “无意义” 的。

初始化测试数据:

create table classes(id int primary key auto_increment,name varchar(20),`desc` varchar(100));create table student(id int primary key auto_increment,sn varchar(20),name varchar(20),qq_email varchar(20),classes_id int);create table course(id int primary key auto_increment,name varchar(20));create table score(score decimal(3,1),student_id int,course_id int);insert into classes(name, `desc`) values
('计算机系2019级1班', '学习了计算机原理、C和Java语言、数据结构和算法'),
('中文系2019级3班','学习了中国传统文学'),
('自动化2019级5班','学习了机械自动化');insert into student(sn, name, qq_email, classes_id) values
('09982','黑旋风李逵','xuanfeng@qq.com',1),
('00835','菩提老祖',null,1),
('00391','白素贞',null,1),
('00031','许仙','xuxian@qq.com',1),
('00054','不想毕业',null,1),
('51234','好好说话','say@qq.com',2),
('83223','tellme',null,2),
('09527','老外学中文','foreigner@qq.com',2);insert into course(name) values
('Java'),('中国传统文化'),('计算机原理'),('语文'),('高阶数学'),('英文');insert into score(score, student_id, course_id) values
-- 黑旋风李逵
(70.5, 1, 1),(98.5, 1, 3),(33, 1, 5),(98, 1, 6),
-- 菩提老祖
(60, 2, 1),(59.5, 2, 5),
-- 白素贞
(33, 3, 1),(68, 3, 3),(99, 3, 5),
-- 许仙
(67, 4, 1),(23, 4, 3),(56, 4, 5),(72, 4, 6),
-- 不想毕业
(81, 5, 1),(37, 5, 5),
-- 好好说话
(56, 6, 2),(43, 6, 4),(79, 6, 6),
-- tellme
(80, 7, 2),(92, 7, 6);

内连接

select 字段 from 表1 别名1 [inner] join 表2 别名2 on 连接条件 and 其他条件;

select 字段 from 表1 别名1,表2 别名2 where 连接条件 and 其他条件;

👁‍🗨案例

1️⃣明确要查询的信息来自于哪些表

2️⃣针对这些表进行笛卡尔积

3️⃣指定连接条件把有意义的数据筛选出来

4️⃣根据需要进一步指定条件对数据再筛选

5️⃣针对查询的列也去进行精简

(1)查询 “许仙” 同学的成绩

1️⃣学生表和分数表

2️⃣对这两个表进行笛卡尔积

3️⃣筛选掉无效的数据

4️⃣

5️⃣


还可以通过另外一个写法 join

select * from student join score;
select * from student join score on student.id = score.student_id;
select * from student join score on student.id = score.student_id and student.name = '许仙';
select name, score from student join score on student.id = score.student_id and student.name = '许仙';

相比于直接多个表 where 的方式来说,join on 的方式,还有更多的变化(支持的功能更多一些)实际开发中,这两个写法都很常用,都要能够掌握

(2)查询所有同学的总成绩,及同学的个人信息
1️⃣学生表和分数表

2️⃣

select * from student,score;

3️⃣

select * from student,score where student.id = score.student_id;

4️⃣针对上述数据进行分组聚合

5️⃣搭配聚合函数

(3)查询所有同学的成绩,及同学的个人信息:

列出同学名字、课程名字、课程分数
1️⃣student course score

2️⃣

select * from student,course,score;

3️⃣

select * from student,course,score where student.id = score.student_id and course.id = score.course_id;

4️⃣

select student.name as studentName,course.name as courseName,score.score from student,course,score where student.id =score.student_id and course.id = score.course_id;


 也可以通过 join on 的方式来写,更能清楚地体现出联合查询的过程

3️⃣

select * from student join score on student.id = score.student_id;
select * from student join score on student.id = score.student_id join course on score.course_id = course.id;

4️⃣

select student.name as studentName,course.name as courseName,score.score from student
join score on student.id = score.student_id join course on score.course_id = course.id;

虽然上述的例子说明,计算笛卡尔积是可以拿任意个表进行的,但是由于笛卡尔积可能会产生出大量的 "中间结果",此时就会对于性能影响很大,甚至严重的,可能会把数据库给搞挂了。因此,多表联合查询,可以用,用的时候,要慎重,需要先对当前这样的多表查询,大慨会涉及到多少数据量进行操作,有一个 "预估"。

外连接

外连接分为左外连接和右外连接。如果联合查询,左侧的表完全显示我们就说是左外连接;右侧的表完全显示我们就说是右外连接。

左外连接就是以左表为基准,能够确保左表中的每个记录都出现在最终结果里,如果左表中的记录,在右表中没有对应的记录,此时就会把右表中的相关字段,填成NULL。

右外连接,是以右表为基准,然后确保右表中的每个记录都出现在最终结果里,如果右表中的某个记录在左表里没有对应的相关字段,填成NULL。

create table student(id int,name varchar(20));
create table score(id int,score int);
insert into student values(1,'张三'),(2,'李四'),(3,'王五');
insert into score values(1,90),(2,80),(3,70);

这俩表的数据,是 "一一对应" 的,此时,针对这两个表,进行内连接和外连接,操作结果,完全相同(内连接和外连接就是等价的效果)。但是,一旦上述的数据,不再一一对应,此时,内连接和外连接,就会出现差别。

update score set id = 4 where score = 70;

内连接:查询结果只包含两个表中同时具备的数据

select name, score from student, score where student.id = score.id;

或者

select name, score from student inner join score on student.id = score.id;

inner 可以省略,在这表示内连接

外连接不支持 from 多个表这种写法,left join 表示左外连接,right join 表示右外连接 

左外连接:

右外连接:

自连接

自连接是指在同一张表连接自身进行查询,即自己和自己进行笛卡尔积

SQL中进行的条件查询,是针对两个列进行比较的,不能比较两个行,自连接,本质上就能把行关系,转换成列关系

👁‍🗨案例 显示所有 “计算机原理” 成绩比 “Java” 成绩高的成绩信息

在自连接之前需要给表取不同的别名再进行连接

select * from score as s1, score as s2;

指定连接条件把无效数据干掉

select * from score as s1,score as s2 where s1.student_id = s2.student_id;

左侧的 score 列就是计算机原理的分数,右侧的 score 列就是 java 的分数,这里原来的行之间的关系就变成了列之间的关系了.

select * from score as s1,score as s2 where s1.student_id = s2.student_id and s1.course_id = 3 and s2.course_id = 1;

这样的结果,就说明了上述 score 表中,只有三个同学同时具有计算机原理和 java 课程

select * from score as s1,score as s2 where s1.student_id = s2.student_id and s1.course_id = 3 and s2.course_id = 1;

select s1.student_id,s1.score,s2.score from score as s1,score as s2 where s1.student_id = s2.student_id and s1.course_id = 3 and s2.course_id = 1 and s1.score > s2.score;

💡如果当前发现,要查询的条件,是针对两行,而不是两列,就可以考虑使用自连接,进行转换。当然自连接的时候,如果表非常大,此时的连接开销,也会非常庞大,容易就把数据库搞死了。

子查询

子查询是指嵌入在其他SQL语句中的 select 语句,也叫嵌套查询

🚫本来一个需求,需要通过多个SQL来完成的,但是现在就偏偏要把多个SQL合并成一个子查询。原则上不推荐大家使用的。

◾️单行子查询:返回一行记录的子查询

👁‍🗨案例 查询与 “不想毕业” 同学的同班同学

不使用子查询:

select classes_id from student where name = '不想毕业';
select name from student where classes_id = 1 and name != '不想毕业';

使用子查询:

select name from student where classes_id =(select classes_id from student where name = '不想毕业') and name != '不想毕业';

◾️多行子查询:返回多行记录的子查询

此时不能使用 = > <这样的运算符直接比较了,但是可以使用 in

👁‍🗨案例 查询 “语文” 或 “英文” 课程的成绩信息

1️⃣[NOT] IN关键字

不使用子查询:

select * from course where name = '语文';

select * from course where name = '英文';

select * from score where course_id in (4,6);

使用子查询:

select * from score where course_id in (select id from course where name = '语文' or name = '英文');

2️⃣[NOT] EXISTS关键字

更不推荐🚫因为 exists 非常消耗时间,背后会触发大量的硬盘IO操作,并且代码理解起来也比较复杂

合并查询

在实际应用中,为了合并多个 select 的执行结果,可以使用集合操作符 union,union all。使用UNION和UNION ALL时,前后查询的结果集中,字段需要一致。

▪️union

该操作符用于取得两个结果集的并集。当使用该操作符时,会自动去掉结果集中的重复行。

▪️union all

该操作符用于取得两个结果集的并集。当使用该操作符时,不会去掉结果集中的重复行。

select * from student union all select * from student2;

📢要求合并的双方,类型、个数、顺序匹配,列名不要求(以左侧为准)

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

使用Process Explorer、Dependency Walker和PE信息查看工具快速排查dll动态库因库与库版本不一致导致的加载失败问题

目录 1、问题说明 2、使用Process Explorer查看目标dll动态库有没有动态加载起来 3、使用Dependency Walker查看xxpadll.dll库的库依赖关系&#xff0c;找到xxpadll.dll加载失败的原因 4、使用PE信息查看工具查看目标dll库的时间戳 5、关于xxsipstack2.dll中调用xxdatanet…

NCCL如何打印XML拓扑文件,操作说明和源码展示

NCCL源码解读的视频在这&#xff1a;NCCL集合通信源码解读、案例、任务调度、拓扑_哔哩哔哩_bilibili 一、环境变量设置 1.1 命令行环境变量设置 为了打印XML拓扑文件&#xff0c;需要设置NCCL的环境变量NCCL_TOPO_DUMP_FILE。这个环境变量指定了XML拓扑文件的输出路径和文件…

时序数据库 TDengine 化工新签约:存储降本一半,查询提速十倍

化工行业在数字化转型过程中面临数据接入复杂、实时性要求高、系统集成难度大等诸多挑战。福州力川数码科技有限公司科技依托深厚的行业积累&#xff0c;精准聚焦行业痛点&#xff0c;并携手 TDengine 提供高效解决方案。通过应用 TDengine&#xff0c;力川科技助力化工企业实现…

Maven的学习以及安装配置 2024/3/1 idea

1. Maven的安装 1.1 首先查看编程工具合适的Maven版本 我使用的是2024/3/1 版本的idea&#xff0c;接下来我会用这个版本的idea进行演示。idea没有汉化的也可以参考我的步骤。 1、打开idea的设置&#xff0c;搜索Maven&#xff0c;进入Maven设置。 我们可以看到&#xff0c;…

kubernetes——part3-5 核心概念 Service

一、 service作用 使用kubernetes集群运行工作负载时&#xff0c;由于Pod经常处于用后即焚状态&#xff0c;Pod经常被重新生成&#xff0c;因此Pod对应的IP地址也会经常变化&#xff0c;导致无法直接访问Pod提供的服务&#xff0c;Kubernetes中使用了Service来解决这一问题&am…

【脚本】Linux一键扩大虚拟内存的大小

Linux增加虚拟内存其实很简单 就那几个命令&#xff0c;free、mkswap、swapon 但是方便起见我写成了脚本 使用方法 进入你的目录&#xff0c; nano ./install_swap.sh 下面的脚本全文复制&#xff0c;粘贴进去之后&#xff0c;按ctrlx后按y保存 然后运行以下命令 sudo bash …

学习 MySQL 需要知道的 28 个小技巧

前言 随着信息技术的不断发展以及互联网行业的高速增长&#xff0c;作为开源数据库的MySQL得到了广泛的应用和发展。目前MySQL已成为关系型数据库领域中非常重要的一员。 无论是运维、开发、测试&#xff0c;还是架构师&#xff0c;数据库技术都是一个 必备加薪神器&#xff…

【Hive】Hive安装

Hive 第一章 Hive的基础知识 第二章 Hive安装 第三章 DDL&#xff08;Data Definition Language&#xff09;数据定义 第四章 DML&#xff08;Data Manipulation Language&#xff09;数据操作 第五章 Hive查询 第六章 Hive的基础知识 第七章 Hive函数 第八章 分区表和分桶表 …

6.聊天室环境安装 - Ubuntu22.04 - elasticsearch(es)的安装和使用

目录 介绍安装安装kibana安装ES客户端使用 介绍 Elasticsearch&#xff0c; 简称 ES&#xff0c;它是个开源分布式搜索引擎&#xff0c;它的特点有&#xff1a;分布式&#xff0c;零配置&#xff0c;自动发现&#xff0c;索引自动分片&#xff0c;索引副本机制&#xff0c;res…

蓝桥每日打卡--合根植物

#蓝桥#JAVA#合根植物 题目描述 w星球的一个种植园&#xff0c;被分成mn个小格子&#xff08;东西方向m行&#xff0c;南北方向n列&#xff09;。每个格子里种了一株合根植物。 这种植物有个特点&#xff0c;它的根可能会沿着南北或东西方向伸展&#xff0c;从而与另一个格子…

线性代数之矩阵特征值与特征向量的数值求解方法

文章目录 前言1. 幂迭代法&#xff08;Power Iteration&#xff09;幂法与反幂法求解矩阵特征值幂法求最大特征值编程实现补充说明 2. 逆幂迭代法&#xff08;Inverse Iteration&#xff09;移位反幂法 3. QR 算法&#xff08;QR Algorithm&#xff09;——稠密矩阵理论推导编程…

【Linux实践系列】:用c语言实现一个shell外壳程序

&#x1f525;本文专栏&#xff1a;Linux Linux实践项目 &#x1f338;博主主页&#xff1a;努力努力再努力wz 那么今天我们就要进入Linux的实践环节&#xff0c;那么我们之前学习了进程控制相关的几个知识点&#xff0c;比如进程的终止以及进程的等待和进程的替换&#xff0c;…

使用STM32CubeMX配置定时器中断实现LED每秒闪烁一次(STM32G070CBT6)

说明&#xff1a; 本案例采用的定时器3&#xff08;TIM3&#xff09;实现&#xff0c;使用其他定时器是一样配置。 如何新建一个工程以及如何配置LED的端口&#xff0c;请查看前面文章&#xff1a;使用STM32CubeMX实现LED灯每秒闪烁一次&#xff08;STM32G070CBT6单片机&…

2025年Draw.io最新版本下载安装教程,附详细图文

2025年Draw.io最新版本下载安装教程&#xff0c;附详细图文 大家好&#xff0c;今天给大家介绍一款非常实用的流程图绘制软件——Draw.io。不管你是平时需要设计流程图、绘制思维导图&#xff0c;还是制作架构图&#xff0c;甚至是简单的草图&#xff0c;它都能帮你轻松搞定。…

GStreamer —— 2.15、Windows下Qt加载GStreamer库后运行 - “播放教程 1:Playbin 使用“(附:完整源码)

运行效果 介绍 我们已经使用了这个元素&#xff0c;它能够构建一个完整的播放管道&#xff0c;而无需做太多工作。 本教程介绍如何进一步自定义&#xff0c;以防其默认值不适合我们的特定需求。将学习&#xff1a; • 如何确定文件包含多少个流&#xff0c;以及如何切换 其中。…

Python----数据可视化(Seaborn一:介绍,应用)

一、Seaborn的介绍 Seaborn 是一个基于 matplotlib 的 Python 库&#xff0c;对其进行了高级 API 的封装&#xff0c;使得作图更为方便和吸引人。尽管在大多数情况下&#xff0c;使用 Seaborn 就能够创建出美观的图表&#xff0c;但 matplotlib 提供了更高的灵活性和定制化的能…

小程序SSL证书过期怎么办?

SSL证书就像小程序的“安全锁”&#xff0c;一旦过期&#xff0c;用户访问时会被提示“不安全”&#xff0c;轻则流失客户&#xff0c;重则数据泄露&#xff01;作为企业负责人&#xff0c;如何快速解决证书过期问题&#xff1f;又该如何避免再次踩坑&#xff1f;这篇指南给你答…

Linux上位机开发实战(x86和arm自由切换)

【 声明&#xff1a;版权所有&#xff0c;欢迎转载&#xff0c;请勿用于商业用途。 联系信箱&#xff1a;feixiaoxing 163.com】 前面我们说过&#xff0c;qt本身支持windows系统&#xff0c;也支持linux系统。不仅如此&#xff0c;qt除了支持传统的x86 cpu之外&#xff0c;还支…

Mysql的卸载安装配置以及简单使用

MySQL其它问题已经更新在&#xff1a;MySQL完善配置---可视化-CSDN博客 一、卸载 ①控制面板卸载 ②C盘隐藏项目>ProgramData>mysql相关文件夹&#xff0c;还有Program file下的MySQL文件夹 ③开始菜单栏搜索>服务&#xff0c;找到MySQL相关服务删除&#xff0c;如果再…

RabbitMQ之旅(1)

相信自己,终会成功 目录 主流MQ产品 1.kafaka 2.RocketMQ 3.RabbitMQ 在xshell上安装RabbitMQ RabbitMQ七种工作模式 1.简单模式 ​编辑 2.工作队列模式 3.发布/订阅模式 4.路由模式 5.通配符模式 6.RPC模式 AMQP.BasicProperties 设置消息属性的类 7.发布确认模…