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

MySQL高级语句(第二部分)

  • MySQL高级语句(第二部分)
    • 一、视图表 create view
      • 1、视图表概述
      • 2、视图表能否修改?(面试题)
      • 3、基本语法
        • 3.1 创建
        • 3.2 查看
        • 3.3 删除
      • 4、通过视图表求无交集值
    • 二、case语句
    • 三、空值(null) 和 无值(’ ') 的区别
    • 四、正则表达式
    • 五、存储过程
      • 1、简介
      • 2、存储过程的优点
      • 3、创建存储过程的步骤
      • 4、存储过程相关命令
        • 4.1 创建存储过程
        • 4.2 调用存储过程
        • 4.3 查看存储过程
        • 4.4 删除存储过程
      • 5、存储过程的参数
        • 5.1 in
        • 5.2 out
        • 5.3 inout
      • 6、存储过程的控制语句
        • 6.1 条件语句if-then-else...end if
        • 6.2 循环语句while .... end while

MySQL高级语句(第二部分)

一、视图表 create view

1、视图表概述

视图,可以被当作是虚拟表或存储查询。

视图跟表格的不同是,表格中有实际储存数据记录,而视图是建立在表格之上的一个架构,它本身并不实际储存数据记录

临时表在用户退出或同数据库的连接断开后就自动消失了,而视图不会消失
视图不含有数据,只存储它的定义,它的用途一般可以简化复杂的查询。

比如你要对几个表进行连接查询,而且还要进行统计排序等操作,写sql语句会很麻烦的,用视图将几个表联结起来,然后对这个视图进行查询操作,就和对一个表查询一样,很方便。

2、视图表能否修改?(面试题)

视图表保存的是select语句的定义,视图表的表数据能否修改,视情况而定font>。

如果 select 语句查询的字段是没有被处理过的源表字段,则可以通过视图表修改源表数据
如果select 语句查询的字段是被 group by语句或 函数 处理过的字段,则不可以直接修改视图表的数据

create view v_store_info as select store_name,sales from store_info;
select * from v_store_info;
update v_store_info set sales=1000 where store_name='Houston';

在这里插入图片描述在这里插入图片描述

create view v_sales as select store_name,sum(sales) from store_info group by store_name having sum(sales)>1000;
select * from v_sales;
update v_sales set store_name='xxxx' where store_name='Los Angeles';

在这里插入图片描述

3、基本语法

3.1 创建
语法:create view "视图表名" as "select 语句";
举例
create view v_region_sales as select a.region region,sum(b.sales) sales from location a 
inner join store_info b on a.store_name = b.store_name group by region;
#创建视图表
show tables;

在这里插入图片描述

3.2 查看
语法:select * from 视图表名;
select * from v_region_sales;

在这里插入图片描述

3.3 删除
语法:drop view 视图表名;
drop view v_region_sales;

在这里插入图片描述

4、通过视图表求无交集值

create view 视图表名 as select distinct 字段 from 左表 union all select distinct 字段 from 右表;select 字段 from 视图表名 group by 字段 having count(字段)=1;
#先建立视图表
create view v_union as select distinct store_name from location union all select distinct store_name from store_info;
#合并两个表的store_name字段
select * from v_union;

在这里插入图片描述

#再通过视图表求无交集
select store_name from v_union group by store_name having count(*)=1;
#直接从v_union中调用select语句,优化SQL语句

在这里插入图片描述

二、case语句

在MySQL中,CASE语句用于根据给定条件对数据进行条件判断和分支选择

它可以在SELECT、UPDATE、DELETE语句中使用,也可以用于表达式中。

语法:
select case ("字段名")when "条件1" then "结果1"when "条件2" then "结果2"...[else "结果n"]end
from "表名";# "条件" 可以是一个数值或是公式。 else 子句则并不是必须的。
#举个例子
select store_name, case store_name when 'los angeles' then sales * 2 when 'boston' then 2000else sales end 
'new sales',date 
from store_info;#将'sales的值作为new sales的值返回

在这里插入图片描述

三、空值(null) 和 无值(’ ') 的区别

(1)无值的长度为 0,不占用空间的;而 null 值的长度是 null,是占用空间的;

(2)is null 或者 is not null,是用来判断字段是不是为 null 或者不是 null,不能查出是不是无值的;

(3)无值的判断使用=’ ‘或者<>’ '来处理,<> 和 !=代表不等于;

(4)在通过 count( )指定字段统计有多少行数时,如果遇到 NULL 值会自动忽略掉,遇到无值会加入到记录中进行计算。

create table city (id int,name varchar(20));
insert into city values (1,'beijing'),(2,'nanjing'),(3,'tianjing');
insert into city values (4,'');
insert into city values (5,'wuhan');
insert into city (id) values (6);
insert into city values (7,'shanghai');
insert into city (id) values (8);
insert into city values (9,'jiuquan');
select * from city;

在这里插入图片描述

select * from city where name is null;
select * from city where name is not null;
#判断字段是不是为 null 或者不是 null

在这里插入图片描述

select * from city where name = '';
select * from city where name != '';
#判断无值

在这里插入图片描述

select * from city where name <> '' or name is null;
#显示空值

在这里插入图片描述

select count(name) from city;
# NULL值会自动忽略掉,无值会加入到记录中
select count(*) from city;
#null值和无值都会加入到记录中

在这里插入图片描述

四、正则表达式

语法:select "字段" from "表名" where "字段" regexp {匹配模式};

匹配模式不区分大小写

匹配模式描述实例
^匹配文本的开始字符‘^bd’ 匹配以 bd 开头的字符串
$匹配文本的结束字符‘qn$’ 匹配以 qn 结尾的字符串
.匹配任何单个字符‘s.t’ 匹配任何 s 和 t 之间有一个字符的字符串
*匹配零个或多个在它前面的字符‘fo*t’ 匹配 t 前面有任意个 o
+匹配前面的字符 1 次或多次‘hom+’ 匹配以 ho 开头,后面至少一个m 的字符串
字符串匹配包含指定的字符串‘clo’ 匹配含有 clo 的字符串
p1|p2匹配 p1 或 p2‘clo’ 匹配含有 clo 的字符串
[…]匹配字符集合中的任意一个字符‘[abc]’ 匹配 a 或者 b 或者 c
[^…]匹配不在括号中的任何字符[^ a b] 匹配不包含 a 或者 b 的字符串
{n}匹配前面的字符串 n 次‘g{2}’ 匹配含有 2 个 g 的字符串
{n,m}匹配前面的字符串至少 n 次,至多m 次‘f{1,3}’ 匹配 f 最少 1 次,最多 3 次
举例
select * from store_info where store_name regexp '^[a-g]';
#匹配以字母a-g开头的数据记录

在这里插入图片描述

select * from store_info where store_name regexp 'Hou+';
#至少出现一次Hou

在这里插入图片描述

select * from store_info where store_name regexp 'os';
#匹配包含字符串os的数据记录

在这里插入图片描述

select * from store_info where store_name regexp 'ho|bo';
select * from store_info where store_name regexp 'Ho|Bo';
#匹配store_info表中包含ho或者bo的数据记录

在这里插入图片描述

select * from store_info where store_name regexp 'b{1}';
#匹配出现一次字母b的

在这里插入图片描述

五、存储过程

存储过程也叫做数据库脚本(MySQL脚本,SQL脚本)

1、简介

存储过程是一组为了完成特定功能的sql语句集合。

存储过程在使用过程中是将常用或者复杂的工作预先使用sql语句写好并用一个指定的名称存储起来,这个过程经编译和优化后存储在数据库服务器中。当需要使用该存储过程时,只需要调用它即可。存储过程在执行上比传统sql速度更快、执行效率更高。

2、存储过程的优点

(1)执行一次后,会将生成的二进制代码驻留缓冲区,提高执行效率
(2)sql语句加上控制语句的集合,灵活性高
(3)在服务器端存储,客户端调用时,降低网络负载
(4)可多次重复被调用,可随时修改,不影响客户端调用
(5)可完成所有的数据库操作,也可控制数据库的信息访问权限

3、创建存储过程的步骤

1)先修改SQL语句结束符

delimiter $$

2)创建存储过程

3)把结束符改回分号

delimiter ;

4)调用存储过程

call 存储过程名;

4、存储过程相关命令

4.1 创建存储过程
delimiter $$							
#将语句的结束符号从分号;临时改为两个$$(可以是自定义)
create procedure proc()					
#创建存储过程,过程名为proc,不带参数
-> begin								
#过程体以关键字 begin 开始
-> select * from store_info;			
#过程体语句
-> end $$								
#过程体以关键字 end 结束
delimiter ;								
#将语句的结束符号恢复为分号delimiter $$							
create procedure proc()					
-> begin
->.....(要执行的命令)
-> select * from store_info;			
-> end $$								
delimiter ;								
#举例delimiter $$ 
create procedure proc1()
begin
create table kkk2 (id int,name varchar(10),age int,sex char(2),primary key (id));
insert into kkk2 values (1,'xx',11,'男');
insert into kkk2 values (2,'yy',22,'女');
insert into kkk2 values (3,'zz',33,'男');
insert into kkk2 values (4,'ww',44,'男');
select * from kkk2;
end $$delimiter ;
show tables;

在这里插入图片描述

4.2 调用存储过程
call 存储过程名;
call proc1;
#调用存储过程,才能看到创建的表和表数据
show tables;

在这里插入图片描述

4.3 查看存储过程
show create procedure [数据库.]存储过程名;		
#查看某个存储过程的具体信息show create procedure 存储过程名\G;show procedure status [like '%存储过程名%'] \G;
#模糊匹配查看

在这里插入图片描述

4.4 删除存储过程

存储过程内容的修改方法是通过删除原有存储过程,之后再以相同的名称创建新的存储过程。

如果要修改存储过程的名称,可以先删除原存储过程,再以不同的命名创建新的存储过程。

语法
drop procedure if exists 存储过程名;		
#仅当存在时删除
#不添加 if exists 时,如果指定的过程不存在,则报错

在这里插入图片描述

5、存储过程的参数

参数功能
in 输入参数表示调用者向过程传入值(传入值可以是字面量或变量)
out 输出参数表示过程向调用者传出值(可以返回多个值)(传出值只能是变量)
inout 输入输出参数既表示调用者向过程传入值,又表示过程向调用者传出值(值只能是变量,传入传出值必须是同一数据类型)
5.1 in
delimiter $$				
create procedure proc1(in in_name char(16))		begin					select * from store_info where store_name = in_name;end $$					
delimiter ;					call proc1('boston');
call proc1('huston');
call proc1('Los Angeles');
#调用存储过程proc1,会根据变量的值,返回目标在表数据中对应的数据
#in_name为自定义变量名

在这里插入图片描述

5.2 out
基本格式delimiter $$
create procedure 存储过程名(in 传入参数名 传入参数数据类型,out 传出参数名 传出参数数据类型)
begin
select 字段 into 传出参数名 from 表名 where 字段=传入参数名;
end $$
delimiter ;call 存储过程名(参数值,@变量名)
#传出参数的值只能用变量获取
#举个例子delimiter $$
create procedure proc2(in myname char(10), out outname int)
begin
select sales into outname from store_info where store_name = myname;
end $$
delimiter ;
#建一个名为 proc1 的存储过程
#存储过程接收一个字符参数 myname,并将与其匹配的 store_info 表中的 sales 值存储到一个整数参数 outname 中call proc2('Houston', @out_sales);
select @out_sales;

在这里插入图片描述

5.3 inout
基本格式delimiter $$
create procedure 存储过程名(into 参数名 参数数据类型)
begin
select 字段 into 传出参数名 from 表名 where 字段=参数名;
end $$
delimiter ;set @变量名 传入值
#变量赋值,传入值
call 存储过程名(@变量名)
#传入传出参数的值只能用变量
select @变量名
#此时变量内容应该为传出值
delimiter $$
create procedure proc3(inout insales int)
begin
select count(sales) into insales from store_info where sales < insales;
end $$
delimiter ;
set @inout_sales=1000;
call proc3(@inout_sales);
select @inout_sales;#创建了一个名为 proc4 的存储过程
#存储过程接受一个输入输出参数 insales,并通过查询 store_info 表获取 sales 值小于 insales 的记录数量,并将结果存储到参数 insales 中。
#通过 call 语句调用该存储过程,并使用 select 语句查看存储在变量 @inout_sales 中的值。

在这里插入图片描述

6、存储过程的控制语句

create table t (id int(10));
insert into t values(10);
6.1 条件语句if-then-else…end if
if 条件表达式 thenSQL语句序列1
elseSQL语句序列2
end if;
delimiter $$  
create procedure proc4(in pro int)  
begin 
declare var int;  
set var=pro*2;   
if var>=10 then 
update t set id=id+1;  
else 
update t set id=id-1;  
end if;  
end $$delimiter ;call proc4(6);
#pro=6

在这里插入图片描述

#举例
delimiter $$
create procedure proc5(in input_age int)
begin
if input_age > 30 then
update kkk2 set sex = '女' where age > 30;
else
update kkk2 set sex = '男' where age <= 30;
end if;
end $$delimiter ;
select * from kkk2;
call proc5(33);
select * from kkk2;
call proc5(22);
select * from kkk2;

在这里插入图片描述

6.2 循环语句while … end while
while 条件表达式
doSQL语句序列set 条件迭代表达式;
end while;
create table t1 (id int);delimiter $$  
create procedure proc6()
begin 
declare i int(10);  
set i=0;  
while i<6 do  
insert into t1 values(i);  
set i=i+1;  
end while;  
end $$  delimiter ;call proc6;
select * from t1;

在这里插入图片描述

举例:
#创建一张表,有一万条数据
#id name
#1 student1
#2 student2
delimiter $$  
create procedure proc7()
begin 
declare i int;
set i=1;
create table t2 (id int ,name varchar(20));
while i<=10000 do  
insert into t2 values(i,concat('student',i)); 
set i=i+1;  
end while;  
end $$  #student+学号做拼接
delimiter ;call proc7;
select * from t2;

在这里插入图片描述

相关文章:

MySQL高级语句(第二部分)

MySQL高级语句(第二部分)一、视图表 create view1、视图表概述2、视图表能否修改&#xff1f;&#xff08;面试题&#xff09;3、基本语法3.1 创建3.2 查看3.3 删除 4、通过视图表求无交集值 二、case语句三、空值(null) 和 无值(’ ) 的区别四、正则表达式五、存储过程1、简介…...

HTML计时事件(JavaScript)网页电子钟+网页计时器

setTimeout("函数","未来指定毫秒后调用函数"); clearTimeout(setTimeout("函数","未来指定毫秒后调用函数")); <!DOCTYPE html> <html><head><meta charset"utf-8"><title></title>…...

使用群晖实现Videostation电影的大容量存储及分享教程

文章目录 1.使用环境要求2.制作视频分享链接3.制作永久固定视频分享链接 李哥和他的女朋友是一对甜蜜的情侣&#xff0c;但不幸的是&#xff0c;由于工作原因&#xff0c;他们目前分隔两地&#xff0c;无法常常亲密相伴。 这个距离让李哥特别怀念和女朋友一起在电影院观看电影的…...

后端大厂面试-15道题

1. 说说计算机存储结构 计算机存储结构通常包括这几个层次&#xff1a; 主存储器&#xff08;Main Memory&#xff09;&#xff1a;也称为内存&#xff08;RAM&#xff0c;Random Access Memory&#xff09;&#xff0c;主要用于存储当前正在执行的程序和数据。它是计算机中最…...

C++: 冒泡排序(Bubble Sort)

假设你有一列由数字组成的玻璃珠&#xff0c;这些珠子的重量不同&#xff0c;你希望将它们按照重量从轻到重排列。你会这样做&#xff1a; 从左到右&#xff0c;比较相邻的两颗珠子的重量。如果左边的珠子比右边的珠子重&#xff0c;就交换它们的位置。然后&#xff0c;继续向…...

跨域的解决方案

文章目录 概念一、什么是跨域问题二、为什么会发生跨域问题三、跨域解决方案1、JSONP2、添加响应头3、Spring注解CrossOrigin4、配置文件&#xff08;常用&#xff09;5、nginx跨域 概念 一、什么是跨域问题 前端调用的后端接口不属于同一个域&#xff08;域名或端口不同&…...

如何使用Java语言判断出geek是字符串参数类型,888是整数参数类型,[hello,world]是数组参数类型,2.5是双精度浮点数类型?

如何使用Java语言判断出geek是字符串参数类型&#xff0c;888是整数参数类型&#xff0c;[hello,world]是数组参数类型&#xff0c;2.5是双精度浮点数类型&#xff1f; Java是一种静态类型的编程语言&#xff0c;这意味着我们需要在编译时为变量指定具体的类型。但是&#xff…...

9.20华为机试-后端

1、丢失报文的位置 某通信系统持续向外发送报文&#xff0c;使用数组 nums 保存 n个最近发送的报文&#xff0c;用于在报文未达到对端的情况下重发。报文使用序号 sn 表示&#xff0c;序号 sn 按照报文发送顺序从小到大排序&#xff0c;相邻报文 sn 不完全连续且有可能相同。报…...

LC926. 将字符串翻转到单调递增(JAVA - 动态规划)

将字符串翻转到单调递增 题目描述动态规划 题目描述 难度 - 中等 LC926. 将字符串翻转到单调递增(JAVA - 动态规划) 如果一个二进制字符串&#xff0c;是以一些 0&#xff08;可能没有 0&#xff09;后面跟着一些 1&#xff08;也可能没有 1&#xff09;的形式组成的&#xff0…...

【高阶数据结构】哈希的应用 {位图;std::bitset;位图的应用;布隆过滤器;布隆过滤器的应用}

一、位图 1.1 位图概念 面试题 给40亿个不重复的无符号整数&#xff0c;没排过序。给一个无符号整数&#xff0c;如何快速判断一个数是否在这40亿个数中。【腾讯】 遍历查找&#xff1a;内存中无法存放40亿个整数&#xff08;约占内存15-16G&#xff09;&#xff1b;时间复杂…...

金融生产存储亚健康治理:升级亚健康 3.0 ,应对万盘规模的挑战

随着集群规模的不断扩大&#xff0c;硬盘数量指数级上升&#xff0c;信创 CPU 和操作系统、硬盘多年老化、物理搬迁等多种复杂因素叠加&#xff0c;为企业的存储亚健康管理增加了新的挑战。 在亚健康 2.0 的基础上&#xff0c;星辰天合在 XSKY SDS V6.2 实现了亚健康 3.0&#…...

C语言自定义类型讲解:结构体,枚举,联合(2)

&#x1f435;本篇文章将会对位段、枚举和联合的相关知识进行讲解 1. 位段&#x1f4da; 1.1 什么是位段 位段的声明和结构体类似&#xff0c;但是有两点不同&#xff1a; 1.位段的成员必须是int&#xff0c;unsigned int&#xff0c;signed int (C99之后也可以是其他成员&am…...

AI编程助手 Amazon CodeWhisperer 全面解析与实践

目录 引言Amazon CodeWhisperer简介智能编程助手智能代码建议代码自动补全 提升代码质量代码质量提升安全性检测 支持多平台多语言 用户体验和系统兼容性用户体验文档和学习资源个性化体验系统兼容性 功能全面性和代码质量功能全面性代码生成质量和代码安全性 CodeWhisperer的代…...

利用EXCEL进行XXE攻击

利用EXCEL进行XXE攻击 原因 原因 Microsoft Office从2007版本引入了新的开放的XML文件格式&#xff0c;新的XML文件格式基于压缩的ZIP文件格式规范&#xff0c;由许多部分组成。 我们可以将其解压缩到特定的文件夹中来查看其包含的文件夹和文件&#xff0c;可以发现其中多数是…...

芯片验证就是一次旅行

如果你国庆希望去一个你不曾去过的城市旅行&#xff0c;比如“中国苏州”。对游客来说&#xff0c;它是个蛮大的城市&#xff0c;有许多景点可以游玩&#xff0c;还有许多事情可以做。但实际上&#xff0c;即使最豪也最清闲的游客也很难看苏州的所有方方面面。同样的道理也适用…...

Java深入理解线程的三大特性

目录 1 CPU缓存导致可见性问题2 线程切换导致原子性问题3 性能优化导致有序性问题4 JMM(Java Memory Model)5 volatile6 synchronized 1 CPU缓存导致可见性问题 线程的三大特性&#xff1a; 可见性&#xff1a;Visibility有序性&#xff1a;Ordering原子性&#xff1a;Atomic…...

2025快手校招面试真题汇总及其解答(二)

6. hashmap数据结构 HashMap 是一种散列表,它是一种根据键值对来存储数据的数据结构。HashMap 的特点是插入、查找和删除操作的时间复杂度都是 O(1),因此它是一种非常高效的数据结构。 HashMap 的工作原理是将键值对存储在一个数组中,每个键值对都由一个哈希函数来映射到数…...

PHP生成带中文的图片

imagettftext() 函数是 PHP 中的一个内置函数&#xff0c;用于使用 TrueType 字体将文本写入图像。 句法&#xff1a; 数组imagettftext&#xff08;资源$image&#xff0c;float $size&#xff0c;float $angle&#xff0c; int $x&#xff0c;int $y&#xff0c;…...

java框架-Dubbo

Dubbo整合Springboot BIO NIO Netty Dubbo 原理 在这里插入图片描述...

Vue+iview 组件中通过v-for循环动态生成form表单进行表单校验

在做项目时&#xff0c;需要根据需要动态添加或新增表单&#xff0c;同时还需要对表单做校验。详情如下图&#xff1a; 刚开始做表单验证的时候&#xff0c;对于这个动态的表单验证有点难搞&#xff0c;试了好几种方法都没有搞定。最后按照下面这种方法实现了&#xff0c;以此…...

云计算——弹性云计算器(ECS)

弹性云服务器&#xff1a;ECS 概述 云计算重构了ICT系统&#xff0c;云计算平台厂商推出使得厂家能够主要关注应用管理而非平台管理的云平台&#xff0c;包含如下主要概念。 ECS&#xff08;Elastic Cloud Server&#xff09;&#xff1a;即弹性云服务器&#xff0c;是云计算…...

Golang 面试经典题:map 的 key 可以是什么类型?哪些不可以?

Golang 面试经典题&#xff1a;map 的 key 可以是什么类型&#xff1f;哪些不可以&#xff1f; 在 Golang 的面试中&#xff0c;map 类型的使用是一个常见的考点&#xff0c;其中对 key 类型的合法性 是一道常被提及的基础却很容易被忽视的问题。本文将带你深入理解 Golang 中…...

大型活动交通拥堵治理的视觉算法应用

大型活动下智慧交通的视觉分析应用 一、背景与挑战 大型活动&#xff08;如演唱会、马拉松赛事、高考中考等&#xff09;期间&#xff0c;城市交通面临瞬时人流车流激增、传统摄像头模糊、交通拥堵识别滞后等问题。以演唱会为例&#xff0c;暖城商圈曾因观众集中离场导致周边…...

Qt Widget类解析与代码注释

#include "widget.h" #include "ui_widget.h"Widget::Widget(QWidget *parent): QWidget(parent), ui(new Ui::Widget) {ui->setupUi(this); }Widget::~Widget() {delete ui; }//解释这串代码&#xff0c;写上注释 当然可以&#xff01;这段代码是 Qt …...

【机器视觉】单目测距——运动结构恢复

ps&#xff1a;图是随便找的&#xff0c;为了凑个封面 前言 在前面对光流法进行进一步改进&#xff0c;希望将2D光流推广至3D场景流时&#xff0c;发现2D转3D过程中存在尺度歧义问题&#xff0c;需要补全摄像头拍摄图像中缺失的深度信息&#xff0c;否则解空间不收敛&#xf…...

在 Nginx Stream 层“改写”MQTT ngx_stream_mqtt_filter_module

1、为什么要修改 CONNECT 报文&#xff1f; 多租户隔离&#xff1a;自动为接入设备追加租户前缀&#xff0c;后端按 ClientID 拆分队列。零代码鉴权&#xff1a;将入站用户名替换为 OAuth Access-Token&#xff0c;后端 Broker 统一校验。灰度发布&#xff1a;根据 IP/地理位写…...

渲染学进阶内容——模型

最近在写模组的时候发现渲染器里面离不开模型的定义,在渲染的第二篇文章中简单的讲解了一下关于模型部分的内容,其实不管是方块还是方块实体,都离不开模型的内容 🧱 一、CubeListBuilder 功能解析 CubeListBuilder 是 Minecraft Java 版模型系统的核心构建器,用于动态创…...

linux arm系统烧录

1、打开瑞芯微程序 2、按住linux arm 的 recover按键 插入电源 3、当瑞芯微检测到有设备 4、松开recover按键 5、选择升级固件 6、点击固件选择本地刷机的linux arm 镜像 7、点击升级 &#xff08;忘了有没有这步了 估计有&#xff09; 刷机程序 和 镜像 就不提供了。要刷的时…...

深入解析C++中的extern关键字:跨文件共享变量与函数的终极指南

&#x1f680; C extern 关键字深度解析&#xff1a;跨文件编程的终极指南 &#x1f4c5; 更新时间&#xff1a;2025年6月5日 &#x1f3f7;️ 标签&#xff1a;C | extern关键字 | 多文件编程 | 链接与声明 | 现代C 文章目录 前言&#x1f525;一、extern 是什么&#xff1f;&…...

MySQL用户和授权

开放MySQL白名单 可以通过iptables-save命令确认对应客户端ip是否可以访问MySQL服务&#xff1a; test: # iptables-save | grep 3306 -A mp_srv_whitelist -s 172.16.14.102/32 -p tcp -m tcp --dport 3306 -j ACCEPT -A mp_srv_whitelist -s 172.16.4.16/32 -p tcp -m tcp -…...