MySQL的相关操作

目录

一. 字符串函数

二. group by分组

2.1 作用

2.2 格式

2.3 举例

三. order by排序

3.1 格式

3.2 举例

四. limit

4.1 作用

4.2 举例

五. having

5.1 作用

5.2 举例

六. 正则表达式

七. 多表查询

7.1 定义

7.2 子查询

7.3 联合查询 纵向合并

7.4 交叉连接 横向合并(不常用)

7.5 内连接

7.5 外连接

7.6 自连接

7.7 三表查询

八. 视图

8.1 创建视图

​8.2 删除视图

九. 函数

十. 存储过程(了解)

十一. 用户管理

11.1 新建用户

11.2 查看用户信息

11.3 重命名用户

11.4 删除用户 

11.5 修改当前登录用户密码

11.6修改其他用户密码

11.7 破解密码

11.8 远程登录

十二. 数据库用户授权

12.1 授予权限

12.2 查看权限

12.3 撤销权限


一. 字符串函数

函数名函数意义
concat(x,y)将提供的参数 x 和 y 拼接成一个字符串
substr(x,y)获取从字符串 x 中的第 y 个位置开始的字符串
substr(x,y,z)获取从字符串 x 中的第 y 个位置开始长度为 z 的字符串
length(x)返回字符串 x 的长度
replace(x,y,z)将字符串 z 替代字符串 x 中的字符串 y
left(x,y)返回字符串 x 的前 y 个字符
right(x,y)返回字符串 x 的后 y 个字符
repeat(x,y)将字符串 x 重复 y 次
space(x)返回 x 个空格
strcmp(x,y)比较x和y,返回的值可以为-1,0,1
reverse(x)将字符串x反转
upper(x)将字符串 x 的所有字母变成大写字母
lower(x)将字符串 x 的所有字母变成小写字母

示例:

#concat
select concat(name,classid) from students where stuid=1;      #将姓名字段和班级字段合在一起
select concat(name,'  ',classid) from students where classid=1;  #加空格

 

#substr
select substr(name,1,3) from students;            
#获取students表中name字段的前1到3个字符select substr(name,3) from students where stuid=25;
#从students表中查找stuid为25的学生记录,提取该学生name字段的子字符串,从第3个字符开始直到结束select substr(name,1,3) from students  where stuid=25;
#从students表中查找stuid为25的学生记录,提取该学生name字段的子字符串,从第1个字符开始,总共提取3个字符

运行结果如下: 

#了解select length(name) from students where stuid=1;          #返回数据的长度
select replace(name,"y",11) from students where stuid=1;  #将name字段中的y换成11
select left(name,3) from students where stuid=1;   #显示name字段 左边三个字符 即最开始的三个
select right(name,3) from students where stuid=1;  #显示name字段 右边三个字符 即最后三个
select repeat(name,2) from students where stuid=1;   #将name字段重复显示2次
select lower(name) from students;   #返回结果全是小写字母
select reverse(name) from students where stuid=1;    #反向显示字符串

二. group by分组

2.1 作用

根据指定的一个或多个列的值将查询结果分成多个组,通常与聚合函数(如COUNT, SUM, AVG, MAX, MIN等)一起使用

2.2 格式

SELECT "字段1", 聚合函数("字段2") FROM "表名" GROUP BY "字段1";

2.3 举例

select  classid  from  students  group  by  classid;    #以classid字段进行分组
select  gender   from  students  group  by  gender;     #以性别进行分组  
select  age      from  students  group  by  age;        #以年龄进行分组select classid,count(*) from students group by classid; #按classid分组,并显示每一组的人数
select age,count(*)  from students group by age;         #按年龄分组,并显示每一组的人数select gender,avg(age) from students group by gender;    #按性别分组,求男女的平均年龄

 运行结果如下

 

注意:凡是在 SELECT 后面出现的、且未在聚合函数中出现的字段,必须出现在 GROUP BY 后面  

#错误示例
select classid,name from students group by classid;

三. order by排序

3.1 格式

SELECT "字段" FROM "表名" [WHERE "条件"] ORDER BY "字段" [ASC, DESC];
#ASC 是按照升序进行排序的,是默认的排序方式。
#DESC 是按降序方式进行排序。

3.2 举例

select * from students order by age;       #年龄升序排列
select * from students order by age desc;  #年龄降序排select * from students where classid=1 order by age;  #找出1班的人按升序排序

 

四. limit

4.1 作用

对查询的结果进行输出行数数量限制

4.2 举例

select * from students  limit 5;                    #取前5个数据
select * from students    limit 3,5;                #跳过前3个,往后取 5个
select * from students order by stuid desc limit 3; #显示最后三个

 

五. having

5.1 作用

HAVING 语句的存在弥补了 WHERE 关键字不能与聚合函数联合使用的不足

5.2 举例

select classid,count(classid) from students group by classid having classid > 3;
#先对所有数据按classid分组,然后使用筛选出classid大于3的组。select classid,count(classid) from students where classid > 3 group by classid;
#先使用筛选出classid大于3的记录,然后再对这些记录按classid分组。

 

六. 正则表达式

匹配	   描述
^	    匹配文本的开始字符
$	    匹配文本的结束字符
.	    匹配任何单个字符
*		匹配零个或多个在它前面的字符
+		匹配前面的字符 1 次或多次字符串	匹配包含指定的字符串
p1|p2	匹配 p1 或 p2
[…]		匹配字符集合中的任意一个字符
[^…]	匹配不在括号中的任何字符
{n}		匹配前面的字符串 n 次
{n,m}	匹配前面的字符串至少 n 次,至多 m 次
{,m}    最多m次
{n,}    最少n次
?      匹配一个字符

举例

select name from students where name regexp '^s';   #查找所有以字母's'开头的学生姓名
select name from students where name regexp 's';     #查找所有姓名中包含字母's'的学生select name from students where name regexp 's.i';   
#查找姓名中包含模式's+任意一个字符+i'的学生
select name from students where name regexp '^s|l';  
#查找所有以's'开头或者包含字母'l'的学生姓名

 

七. 多表查询

7.1 定义

多表查询是指在单个SQL查询中同时从两个或多个表中检索数据的操作。

7.2 子查询

定义

子查询是嵌套在另一个查询中的查询。

举例

select avg(age) from students;   #求平均年龄
select * from students where age > (select avg(age) from students);    #再找出比平均年龄大的

#类似的SELECT avg(Age) FROM teachers   #先计算出 教师表的 平均年龄
update students set Age=(SELECT avg(Age) FROM teachers)  where stuid=25; # 再把第25个学生的年龄改成  教师表的平均年龄

7.3 联合查询 纵向合并

返回两个表的笛卡尔积(即第一个表的每一行与第二个表的每一行的所有可能组合)。

格式:

-- 去除重复行
SELECT column1, column2 FROM table1
UNION
SELECT column1, column2 FROM table2;-- 保留重复行
SELECT column1, column2 FROM table1
UNION ALL
SELECT column1, column2 FROM table2;

举例: 

select name,age from students union select name,age from teachers;
#将students表和teachers表中的name和age列合并在一起。

 

#默认union是会自动去重的,union all是不会去重的select * from teachers union  select *from teachers;
select * from teachers union all select *from teachers;

7.4 交叉连接 横向合并(不常用)

通过cross join操作将两个或多个表中的相关数据组合在一起,基于指定的连接条件。

交叉连接生成的记录可能会非常多,建议慎用

格式:

SELECT * FROM table1 CROSS JOIN table2;

举例: 

select * from students cross join teachers;
#students表和teacher表合并

7.5 内连接

返回两个表中满足连接条件的记录。

格式:

SELECT * FROM table1 INNER JOIN table2 ON table1.column = table2.column;

举例:

select * from students inner join teachers on students.teacherid=teachers.tid;
#学生表中的teacherid和教师表中的tid相同的行

 

7.5 外连接

外连接可以分为:左连接和右连接

左连接: 以左表为主根据条件查询右表数据﹐如果根据条件查询右表数据不存在使用null值填充

右连接: 以右表为主根据条件查询左表数据﹐如果根据条件查询左表数据不存在使用null值填充

格式:

-- 左外连接:保留左表所有行
SELECT * FROM table1 LEFT JOIN table2 ON table1.column = table2.column;-- 右外连接:保留右表所有行
SELECT * FROM table1 RIGHT JOIN table2 ON table1.column = table2.column;

举例: 

select * from students s left join teachers t  on s.teacherid=t.tid;
#左外连接学生表都有,教师表留一部分select * from students s right join  teachers t on s.teacherid=t.tid;
#右外连接教师表全部,学生表一部分

7.6 自连接

自连接, 即表自身连接自身

格式:

-- 使用内连接的自连接
SELECT a.column, b.column 
FROM table a INNER JOIN table b ON a.column = b.related_column;-- 使用左外连接的自连接
SELECT a.column, b.column 
FROM table a LEFT JOIN table b ON a.column = b.related_column;

举例: 

#构建新表,如下图所示
create table emp (id int, name varchar(10),leaderid int);
insert emp values(1,'cxk',null),(2,'wyf',1),(3,'zhang',2),(4,'li',3);

select * from emp e left join  emp l on  e.leaderid=l.id;
#查找每个员工及其对应的领导信息。

7.7 三表查询

select * from  students inner join scores on students.stuid=scores.stuid;
select st.name,sc.CourseID,sc.score from  students st inner join scores sc on st.stuid=sc.stuid;
select st.name,co.CourseID,sc.score from  students st inner join scores sc on st.stuid=sc.stuid inner  join courses co on sc.courseid=co.courseid;
select * from  students st inner join scores sc on st.stuid=sc.stuid inner  join courses co on sc.courseid=co.courseid;

八. 练习

导入hellodb.sql生成数据库
1. 在students表中,查询年龄大于25岁,且为男性的同学的名字和年龄
select  name,age  from  students   where  age>25 and  gender='m'; 2. 以ClassID为分组依据,显示每组的平均年龄
select  classid,avg(age)     from  students   group  by  classid;  3. 显示第2题中平均年龄大于30的分组及平均年龄
select  classid,avg(age)     from  students   group  by  classid having  avg(age) > 30; 4. 显示以L开头的名字的同学的信息
select *from students  where  name like "l%";5. 显示TeacherID非空的同学的相关信息
select *  from  students  where TeacherID  is not null;  6. 以年龄排序后,显示年龄最大的前10位同学的信息
select  *  from  students   order by  age desc  limit 10 ;7. 查询年龄大于等于20岁,小于等于25岁的同学的信息
select  *  from  students   where age >= 20  and  age <= 25; 8. 以ClassID分组,显示每班的同学的人数select  classid,count(*)  from  students  group by  classid;9. 以Gender分组,显示其年龄之和
select gender,sum(age)  from  students  group by gender;10. 以ClassID分组,显示其平均年龄大于25的班级
select  classid,avg(age)  from  students  group by  classid  having  avg(age)  > 25;11. 以Gender分组,显示各组中年龄大于25的学员的年龄之和
select gender  from  students  where age >25 group by gender;

八. 视图

将复杂的 SQL 查询封装成一个简单的虚拟表,用户只需查询视图即可获取所需数据,无需重复编写复杂的查询语句。

8.1 创建视图

语法:

create  view   视图名字    as   查询语句 

举例:

create view v1 as select * from students  where stuid=5;
#创建一个查询stuid为5的学生的视图select * from v1;
#运行视图,效果与执行代码select * from students  where stuid=5;一样

8.2 删除视图

语法:

drop view 视图名称

举例:

drop view v1;

九. 函数

MySQL中的函数分为内置函数和自定义函数

系统内置函数参考网页:

https://dev.mysql.com/doc/refman/8.0/en/sql-function-reference.html
https://dev.mysql.com/doc/refman/5.7/en/sql-function-reference.html

自定义函数

语法:

create   function   函数名字
执行语句
return 

举例:

DELIMITER //
CREATE FUNCTION deleteById(id SMALLINT UNSIGNED) 
RETURNS VARCHAR(20)
DETERMINISTIC
MODIFIES SQL DATA
BEGINDELETE FROM students WHERE stuid = id;RETURN (SELECT COUNT(*) FROM students);
END//
DELIMITER ;函数作用:
接收一个无符号小整数类型的参数id
从students表中删除stuid等于传入id值的记录
删除操作完成后,计算并返回students表中剩余的记录总数(作为VARCHAR(20)类型返回)

 

十. 存储过程(了解)

存储过程把经常使用的SQL语句或业务逻辑封装起来,预编译保存在数据库中,当需要时从数据库中直接调用,省去了编译的过程,提高了运行速度,同时降低网络数据传输量

存储过程与自定义函数的区别

存储过程实现的过程要复杂一些,而函数的针对性较强存储过程可以有多个返回值,而自定义函数只有一个返回值存储过程一般可独立执行,而函数往往是作为其他SQL语句的一部分来使用无参数的存储过程执行过程中可以不加(),函数必须加 ( )

十一. 用户管理

11.1 新建用户

create user '用户名'@'源地址'   identified by '密码';'用户名'
指定将创建的用户名'来源地址'
指定新创建的用户可在哪些主机上登录
可使用IP地址、网段、主机名的形式
本地用户可用localhost
允许任意主机登录可用通配符%'密码'
若使用明文密码,直接输入'密码',插入到数据库时由Mysql自动加密;若使用加密密码,需要先使用select password('密码'); 获取密文,再在语句中添加 password '密文';若省略“identified by”部分,则用户的密码将为空(不建议使用)

11.2 查看用户信息

#创建后的用户保存在 mysql 数据库的 user 表里
use mysql;
select user,authentication_string,Host from user;

11.3 重命名用户

rename user 'zhangsan'@'localhost' to 'lisi'@'localhost';

11.4 删除用户 

drop user 'lisi'@'localhost';

11.5 修改当前登录用户密码

#修改当前用户的密码
set password = password('abc123');

11.6修改其他用户密码

#方式一
set password for 'user1'@'localhost' = PASSWORD('abc123');#方式二
alter user '用户名'@'源地址' identified by '密码';#例子
alter user 'root'@'%' indentified by 'abc123'

11.7 破解密码

常用于忘记 root 密码

方法一. 修改 mysql配置文件/etc/my.cnf ,不使用密码直接登录到 mysql

vim /etc/my.cnf
[mysqld]
skip-grant-tables #添加,使登录mysql不使用授权表
skip-networking   #MySQL8.0不需要systemctl restart mysqldmysql								#直接登录

方法二. 使用 update 修改 root 密码,刷新数据库

use mysql;update user set authentication_string=password('密码') where user='root';FLUSH PRIVILEGES;
quitmysql -u root -pabc123#注意:最后再把 /etc/my.cnf 配置文件里的 skip-grant-tables 删除,并重启 mysql 服务。

11.8 远程登录

mysql -utest -h要登陆的mysql服务IP   -p'密码'  -P端口号

十二. 数据库用户授权

12.1 授予权限

GRANT语句:专门用来设置数据库用户的访问权限。当指定的用户名不存在时,GRANT语句将会创建新的用户;当指定的用户名存在时, GRANT 语句用于修改用户信息。  

grant 权限列表 on 数据库名.表名 to '用户名'@'来源地址' [indentified by '密码'];#权限列表:用于列出授权使用的各种数据库操作,以逗号进行分隔,如“select,insert,update”。使用“all”表示所有权限,可授权执行任何操作。
#数据库名.表名:用于指定授权操作的数据库和表的名称,其中可以使用通配符“*”。例如,使用“kgc.*”表示授权操作的对象为 kgc数据库中的所有表。
#'用户名@来源地址':用于指定用户名称和允许访问的客户机地址,即谁能连接、能从哪里连接。
#来源地址可以是域名、IP地址,还可以使用“%”通配符,表示某个区域或网段内的所有地址,如“%.byyb.com”、“192.168.80.%”等。
#IDENTIFIED BY:用于设置用户连接数据库时所使用的密码字符串。在新建用户时,若省略“IDENTIFIED BY”部分,则用户的密码将为空。#举例
GRANT ALL [PRIVILEGES] ON *.* TO 'lisi'@'%' IDENTIFIED BY '123456';
#允许用户 lisi 在所有终端远程连接 mysql ,并拥有所有权限。

 

12.2 查看权限

show grants for 用户名@来源地址;#举个例子
show grants for root;

12.3 撤销权限

revoke 权限列表 on 数据库名.表名 from 用户名@来源地址;#例子
revoke all on *.* from zhou@"192.168.91.%";
#撤销用户"zhou"从192.168.91.x网段连接时对整个MySQL的所有权限。

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

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

相关文章

网络安全-等级保护(等保) 2-7-3 GB/T 25058—2019 第7章 安全设计与实施

############################################################################### 对于安全厂家而言&#xff0c;最关心的内容在本章节&#xff0c;根据已确定的安全总体方案&#xff0c;完成技术措施和管理措施的详细设计和实施&#xff0c;包含具体的安全产品和管理要求。…

【Spring Boot】配置实战指南:Properties与YML的深度对比与最佳实践

目录 1.前言 2.正文 2.1配置文件的格式 2.2properties 2.2.1基础语法 2.2.2value读取配置文件 2.2.3缺点 2.3yml 2.3.1基础语法 2.3.2配置不同数据类型 2.3.3配置读取 2.3.4配置对象和集合 2.3.5优缺点 2.4综合练习&#xff1a;验证码案例 2.4.1分析需求 2.4.2…

20250519使用TF卡将NanoPi NEO core开发板刷机为Ubuntu core22.04.3系统完成之后执行poweroff自动关机

1、h3-sd-friendlycore-xenial-4.14-armhf-20210618.img.gz 在WIN10下使用7-ZIP解压缩/ubuntu20.04下使用tar 2、Win32DiskImager.exe 写如32GB的TF卡。【以管理员身份运行】 3、TF卡如果已经做过会有3个磁盘分区&#xff0c;可以使用SD Card Formatter/SDCardFormatterv5_WinE…

编译Qt5.15.16并启用pdf模块

编译Qt5.15.16并启用pdf模块 标题1.目录设置 -q-bulid –qt-everywhere-src-5.15.16 –bulid cd bulid 必须&#xff0c;否则会提示Project ERROR: You cannot configure qt separately within a top-level build. create .qmake.stash and .qmake.super in build folder …

“智”斗秸秆焚烧,考拉悠然以科技之力筑牢生态安全防线

清晨&#xff0c;薄雾笼罩着辽阔的田野&#xff0c;农民们开始了一天的劳作。然而&#xff0c;随着收割季的到来&#xff0c;秸秆焚烧问题也逐渐浮现&#xff0c;成为威胁空气质量与生态安全的隐患。传统监管方式往往显得力不从心&#xff0c;效率低下的困境亟待突破。在此背景…

Nockchain项目部署教程

Nockchain头矿窗口正在打开&#xff0c;不拼设备&#xff0c;现在部署&#xff0c;马上就要开挖了。 一、项目介绍 Nockchain 是结合了POW和ZKVM的区块链协议。 主要特点&#xff1a; 1&#xff09;计算存储新域名空间三位一体架构&#xff0c;高吞吐量 2&#xff09;使用No…

2025年气候持续大风,消纳减少,如何保收益?东润能源整体解决方案持续保收益保增长

引言 随着全球气候变化加剧,2025年极端天气频发,风资源丰富但电网消纳能力不足的问题日益突出,导致许多风电项目面临限电、收益下滑的挑战。如何在复杂的气候和电力市场环境下保障投资收益,成为行业关注的焦点。东润能源凭借领先的技术创新和综合能源解决方案,为风电行业…

2023河南CCPC省赛vp部分补题

A 模拟 暴力 对每个合法的前缀&#xff0c;判断后缀是不是合法 int a[29]; void solve(){string s;cin>>s;int t-1;if(s.size()1){return cout<<"NaN"<<endl,void();}for(int i0;i<27;i) a[i]0;for(int i0;i<s.size();i){a[s[i]-a];if(…

【2025保姆级】Open-WebUI五大功能区首曝!第一篇:管理员面板深度拆解,手把手讲解配置AI管理中枢

【2025保姆级】Open-WebUI五大功能区首曝&#xff01;第一篇&#xff1a;管理员面板深度拆解&#xff0c;手把手讲解&配置AI管理中枢 一、引言二、用户2.1 概述2.2 权限组 三、竞技场评估四、函数五、设置5.1 通用5.1.1 身份验证5.1.2 功能 5.2 外部连接5.2.1 OpenAI API5.…

docker上传镜像

向Docker Hub上传镜像&#xff0c;需要按照一定的步骤进行操作。 Docker Hub是Docker的官方镜像仓库&#xff0c;用户可以在其中存储、管理和部署Docker镜像。要向Docker Hub上传镜像&#xff0c;请遵循以下步骤&#xff1a; 创建Docker Hub账户&#xff1a; 访问Docker Hub官…

(十三)深入了解AVFoundation-采集:视频帧采集与实时滤镜处理

引言 在移动应用中&#xff0c;实时视频处理已成为视频拍摄、短视频、直播、美颜相机等功能的核心技术之一。从简单的滤镜叠加&#xff0c;到复杂的美颜、AR 特效&#xff0c;背后都离不开对每一帧图像的高效采集与处理。在前几篇文章中&#xff0c;我们已经实现了基本的视频采…

数字政务安全实战:等保2.0框架下OA系统防护全解析

近期在Python基础教学领域深入钻研函数机制、数据结构优化等内容时&#xff0c;深刻意识到信息安全作为技术基石的战略价值。在政务数字化转型浪潮中&#xff0c;Python凭借其高扩展性与丰富的安全生态库&#xff0c;成为构建政务OA系统安全防护体系的核心工具。本文将以等保2.…

Pytorch项目实战-2:花卉分类

一、前言 在深度学习项目中&#xff0c;数据集的处理和模型的训练、测试、预测是关键环节。本文将为小白详细介绍从数据集搜集、清洗、划分到模型训练、测试、预测以及模型结构查看的全流程&#xff0c;附带代码和操作说明&#xff0c;让你轻松上手&#xff01; 二、数据集 …

React Flow 边事件处理实战:鼠标事件、键盘操作及连接规则设置(附完整代码)

本文为《React Agent&#xff1a;从零开始构建 AI 智能体》专栏系列文章。 专栏地址&#xff1a;https://blog.csdn.net/suiyingy/category_12933485.html。项目地址&#xff1a;https://gitee.com/fgai/react-agent&#xff08;含完整代码示​例与实战源&#xff09;。完整介绍…

java小结(一)

java&#xff08;上&#xff09; 模块一 1.JDK,JRE,JVM 知识点 核心内容 易混淆点 JDK定义 Java Development Kit&#xff08;Java开发工具包&#xff09;&#xff0c;包含开发所需全部工具 JDK包含JRE的关系容易混淆 JRE定义 Java Runtime Environment&#xff08;Jav…

ddns-go安装介绍-强大的ipv6动态域名解析神器-家庭云计算专家

ddns-go 是一款轻量级开源动态域名解析工具&#xff0c;专注于解决动态IP环境下的域名绑定问题&#xff0c;尤其适配IPv6网络环境。其核心功能包括&#xff1a; 1.IPv6动态解析&#xff1a;自动检测本地IPv6地址变化&#xff08;支持网卡、接口或命令获取&#xff09;&#xf…

Docker-mongodb

拉取 MongoDB 镜像: docker pull mongo 创建容器并设置用户&#xff1a; 要挂载本地数据目录&#xff0c;请替换此路径: /Users/Allen/Env/AllenDocker/mongodb/data/db docker run -d --name local-mongodb \-e MONGO_INITDB_ROOT_USERNAMEadmin \-e MONGO_INITDB_ROOT_PA…

WooCommerce缓存教程 – 如何防止缓存破坏你的WooCommerce网站?

我们在以前的文章中探讨过如何加快你的WordPress网站的速度&#xff0c;并研究过各种形式的缓存。 然而&#xff0c;像那些使用WooCommerce的动态电子商务网站&#xff0c;在让缓存正常工作方面往往会面临重大挑战。 在本指南中&#xff0c;我们将告诉你如何为WooCommerce设置…

贪心算法 Part04

总结下重叠区间问题 LC 452. 用最少数量的箭引爆气球 和 LC 435. 无重叠区间 本质上是一样的。 LC 452. 用最少数量的箭引爆气球 是求n个区间当中 &#xff0c; 区间的种类数量 k。此处可以理解为&#xff0c;重叠在一起的区间属于同一品种&#xff0c;没有重叠的区间当然…

云原生CD工具-Argocd+ArgoRollout入门到精通

第一章 Argo CD简介 课时1.1 Argo产品介绍 ARGO官网地址:https://argoproj.github.io/ 旗下产品有: Argo Workflows、ArgoCD 、Argo Rollouts 、Argo Events 课时1.2 什么是Argo CD Argo CD 是一个开源的持续交付工具, 是 Kubernetes 的声明式 GitOps 持续交付工具。专…