Mysql--基础篇--函数(字符串函数,日期函数,数值函数,聚合函数,自定义函数及与存储过程的区别等)

MySQL提供了丰富的内置函数,涵盖了字符串处理、数值计算、日期和时间操作、聚合统计、控制流等多种功能。这些函数可以帮助你简化SQL查询,提升开发效率。
除了内置函数,MySQL还支持自定义函数(User-Defined Functions),允许用户根据自己的需求编写复杂的逻辑。

一、MySQL内置函数

1、字符串函数

字符串函数用于处理和操作文本数据。以下是一些常用的字符串函数:

1.1、CONCAT()
  • 作用:连接多个字符串。
  • 语法:CONCAT(str1, str2, …, strN)

示例:

SELECT CONCAT('Hello', ' ', 'World');  -- 输出: Hello World
1.2、CONCAT_WS()
  • 作用:使用指定的分隔符连接多个字符串。
  • 语法:CONCAT_WS(separator, str1, str2, …, strN)

示例:

SELECT CONCAT_WS('-', '2024', '12', '31');  -- 输出: 2024-12-31

运行结果:
在这里插入图片描述

1.3、SUBSTRING()或SUBSTR()
  • 作用:从字符串中提取子字符串。
  • 语法:SUBSTRING(str, pos, len) 或 SUBSTR(str, pos, len)

示例:

SELECT SUBSTRING('Hello World', 7, 5);  -- 从第7个元素开始,截取5个元素。输出: World
1.4、LEFT()和RIGHT()
  • 作用:分别从字符串的左侧或右侧提取指定长度的字符。
  • 语法:LEFT(str, len)和RIGHT(str, len)

示例:

SELECT LEFT('Hello World', 5);  -- 从最左侧开始截取5个元素。输出: Hello
SELECT RIGHT('Hello World', 5); -- 从最右侧开始截取5个元素。输出: World
1.5、LENGTH()和CHAR_LENGTH()
  • 作用:分别返回字符串的字节长度和字符长度。
  • 语法:LENGTH(str)和CHAR_LENGTH(str)

示例:

SELECT LENGTH('Hello'), CHAR_LENGTH('Hello');  -- 输出: 5, 5
SELECT LENGTH('你好'), CHAR_LENGTH('你好');     -- 输出: 6, 2 (中文字符占多个字节)
1.6、LOWER()和UPPER()
  • 作用:将字符串转换为小写或大写。
  • 语法:LOWER(str) 和 UPPER(str)

示例:

SELECT LOWER('HELLO'), UPPER('hello');  -- 输出: hello, HELLO
1.7、TRIM()
  • 作用:去除字符串两端的空格或其他指定字符。
  • 语法:TRIM([BOTH | LEADING | TRAILING] [remstr] FROM str)

示例:

  SELECT TRIM('   Hello World   ');  -- 输出: Hello WorldSELECT TRIM(BOTH '_' FROM '__Hello__');  -- 输出: Hello
1.8、REPLACE()
  • 作用:替换字符串中的某个子字符串。
  • 语法:REPLACE(str, from_str, to_str)

示例:

SELECT REPLACE('Hello World', 'World', 'Universe');  -- 输出: Hello Universe

2、数值函数

数值函数用于处理和计算数值数据。

2.1、ABS()
  • 作用:返回数值的绝对值。
  • 语法:ABS(num)

示例:

SELECT ABS(-10);  -- 输出: 10
2.2、CEIL()和FLOOR()
  • 作用:分别返回大于或等于给定数值的最小整数,以及小于或等于给定数值的最大整数。
  • 语法:CEIL(num)和FLOOR(num)

示例:

SELECT CEIL(3.14), FLOOR(3.14);  -- 输出: 4, 3
2.3、ROUND()
  • 作用:对数值进行四舍五入。
  • 语法:ROUND(num, decimals)

示例:

SELECT ROUND(3.14159, 2);  -- 输出: 3.14
SELECT ROUND(3.14159);  -- 输出: 3
2.4、MOD()
  • 作用:返回两个数相除后的余数。
  • 语法:MOD(num1, num2)或num1 % num2

示例:

 SELECT MOD(10, 3);  -- 输出: 1
2.5、POW()和POWER()
  • 作用:返回第一个参数的幂次方。
  • 语法:POW(base, exponent) 或 POWER(base, exponent)

示例:

 SELECT POW(2, 3);  -- 输出: 8
2.6、SQRT()
  • 作用:返回数值的平方根。
  • 语法:SQRT(num)

示例:

SELECT SQRT(16);  -- 输出: 4
2.7、RAND()
  • 作用:返回一个0到1之间的随机浮点数。
  • 语法:RAND()

示例:

  SELECT RAND();  -- 输出: 随机浮点数

运行结果:
在这里插入图片描述

3、日期和时间函数

日期和时间函数用于处理和操作日期、时间数据。

3.1、NOW()和CURRENT_TIMESTAMP()
  • 作用:返回当前的日期和时间。
  • 语法:NOW() 和 CURRENT_TIMESTAMP()

示例:

  SELECT NOW();  -- 输出: 当前日期和时间

运行结果:
在这里插入图片描述

3.2、CURDATE()和CURTIME()
  • 作用:分别返回当前的日期和时间。
  • 语法:CURDATE()和CURTIME()

示例:

SELECT CURDATE(), CURTIME();  -- 输出: 当前日期, 当前时间

在这里插入图片描述

3.3、DATE()和TIME()
  • 作用:分别提取日期和时间部分。
  • 语法:DATE(datetime) 和 TIME(datetime)

示例:

 SELECT DATE('2024-12-31 14:30:00'), TIME('2024-12-31 14:30:00');  -- 输出: 2024-12-31, 14:30:00
3.4、YEAR()、MONTH()、DAY()等
  • 作用:提取日期中的年、月、日等部分。
  • 语法:YEAR(date)、MONTH(date)、DAY(date) 等

示例:

  SELECT YEAR('2024-12-31'), MONTH('2024-12-31'), DAY('2024-12-31');  -- 输出: 2024, 12, 31
3.5、DATEDIFF()
  • 作用:计算两个日期之间的天数差。
  • 语法:DATEDIFF(date1, date2)

示例:

 SELECT DATEDIFF('2024-12-31', '2024-01-01');  -- 输出: 365
3.6、TIMESTAMPDIFF()
  • 作用:计算两个日期或时间之间的差异,支持多种单位(如年、月、日、小时等)。
  • 语法:TIMESTAMPDIFF(unit, datetime1, datetime2)

示例:

  SELECT TIMESTAMPDIFF(YEAR, '1990-01-01', '2024-12-31');  -- 输出: 34
3.7、DATE_ADD()和DATE_SUB()
  • 作用:在日期上添加或减去指定的时间间隔。
  • 语法:DATE_ADD(date, INTERVAL expr unit) 和 DATE_SUB(date, INTERVAL expr unit)

示例:

  SELECT DATE_ADD('2024-12-31', INTERVAL 1 DAY);  -- 增加1个月。输出: 2025-01-01SELECT DATE_SUB('2024-12-31', INTERVAL 1 MONTH);  -- 减去1个月。输出: 2024-11-30

4、聚合函数

聚合函数用于对一组数据进行汇总计算。以下是一些常用的聚合函数:

4.1、COUNT()
  • 作用:计算行数。
  • 语法:COUNT()或COUNT(column)

示例:

 SELECT COUNT() FROM employees;  -- 计算表中所有行数SELECT COUNT(salary) FROM employees;  -- 计算非空 salary 的行数
4.2、SUM()
  • 作用:计算数值列的总和。
  • 语法:SUM(column)

示例:

 SELECT SUM(salary) FROM employees;  -- 计算所有员工的工资总和
4.3、AVG()
  • 作用:计算数值列的平均值。
  • 语法:AVG(column)

示例:

 SELECT AVG(salary) FROM employees;  -- 计算所有员工的平均工资
4.4、MAX()和MIN()
  • 作用:分别返回数值列中的最大值和最小值。
  • 语法:MAX(column)和MIN(column)

示例:

  SELECT MAX(salary), MIN(salary) FROM employees;  -- 返回最高和最低工资
4.5、GROUP_CONCAT()
  • 作用:将多行数据合并为一个字符串。
  • 语法:GROUP_CONCAT(column [SEPARATOR separator])

示例:

  SELECT department, GROUP_CONCAT(name SEPARATOR ', ') AS employeesFROM employeesGROUP BY department;

运行结果:
在这里插入图片描述

5、控制流函数

控制流函数用于在查询中实现条件逻辑。以下是一些常用的控制流函数:

5.1、IF()
  • 作用:根据条件返回不同的值。
  • 语法:IF(condition, true_value, false_value)

示例:

  SELECT name, IF(salary > 50000, 'High', 'Low') AS salary_levelFROM employees;

运行结果:
在这里插入图片描述

5.2、CASE表达式
  • 作用:实现多条件判断。
  • 语法:
  CASEWHEN condition1 THEN result1WHEN condition2 THEN result2...ELSE default_resultEND

示例:

  SELECT name,CASEWHEN salary > 80000 THEN 'Senior'WHEN salary > 50000 THEN 'Mid-level'ELSE 'Junior'END AS levelFROM employees;

运行结果:
在这里插入图片描述

5.3、COALESCE()
  • 作用:返回第一个非空的表达式。
  • 语法:COALESCE(expr1, expr2, …, exprN)

示例:

  SELECT COALESCE(phone, email, 'No contact info') AS contact_infoFROM employees;

运行结果:
在这里插入图片描述
说明:
COALESCE(参数1,参数2…),方法可以包含多个参数,方法返回第一个不为空的参数值。

5.4、NULLIF()
  • 作用:如果两个表达式相等,则返回NULL,否则返回第一个表达式。
  • 语法:NULLIF(expr1, expr2)

示例:

  SELECT NULLIF(manager_id, 0) AS managerIdFROM employees;

运行结果:
manger_id和null(本例的0)作比较,如果不相等返回第一个表达式的值,如果相等则返回null
在这里插入图片描述
manger_id和manger_id自身相比,肯定都是相同的,都返回了null
在这里插入图片描述

6、加密和哈希函数

加密和哈希函数用于生成加密字符串或哈希值。以下是一些常用的加密和哈希函数:

6.1、MD5()
  • 作用:生成MD5哈希值。
  • 语法:MD5(str)

示例:

 SELECT MD5('password');  -- 输出: 5f4dcc3b5aa765d61d8327deb882cf99

运行结果:
在这里插入图片描述

6.2、SHA1()和SHA2()
  • 作用:生成SHA-1或SHA-2哈希值。
  • 语法:SHA1(str)和SHA2(str, bit_length)

示例:

 SELECT SHA1('password');  -- 输出: 5baa61e4c9b93f3f0682250b6cf8331b7ee68fd8SELECT SHA2('password', 256);  -- 输出: 5e884898da28047151d0e56f8dc6292773603d0d6aabbdd62a11ef721d1542d8

运行结果:
在这里插入图片描述

6.3、AES_ENCRYPT()和AES_DECRYPT()
  • 作用:使用AES算法进行加密和解密。
  • 语法:AES_ENCRYPT(str, key)和AES_DECRYPT(encrypted_str, key)

示例:

 SELECT AES_ENCRYPT('secret', 'mykey');SELECT AES_DECRYPT(AES_ENCRYPT('secret', 'mykey'), 'mykey');

运行结果:
在这里插入图片描述

7、其他函数

除了上述分类,MySQL还提供了一些其他类型的函数。

7.1、UUID()
  • 作用:生成一个唯一的UUID(通用唯一标识符)。
  • 语法:UUID()

示例:
SELECT UUID();
运行结果:
在这里插入图片描述

7.2、INET_ATON()和INET_NTOA()
  • 作用:将IP地址转换为整数,或将整数转换为IP地址。
  • 语法:INET_ATON(ip_address) 和 INET_NTOA(integer)

示例:
SELECT INET_ATON(‘192.168.1.1’); – 输出: 3232235777
SELECT INET_NTOA(3232235777); – 输出: 192.168.1.1
运行结果:
在这里插入图片描述

8、内置函数总结

MySQL提供了丰富多样的内置函数,涵盖了字符串处理、数值计算、日期和时间操作、聚合统计、控制流、加密和哈希操作等多个方面。合理使用这些函数可以大大简化SQL查询,提高开发效率并增强数据处理能力。

二、MySQL自定义函数

除了内置函数,MySQL还支持自定义函数(User-Defined Functions, UDF),允许用户根据自己的需求编写复杂的逻辑。

自定义函数可以分为两类:

  • 存储函数(Stored Functions):使用SQL语法自定义编写函数,可以在数据库中存储并调用。
  • C语言编写的UDF(User-Defined Functions):通过C或C++编写并编译为动态链接库(.so 文件),然后在MySQL中加载和使用。

1、存储函数(Stored Functions)

存储函数是使用SQL和PL/SQL编写的函数,类似于存储过程,但它们返回一个值。存储函数可以在SELECT、INSERT、UPDATE等SQL语句中直接调用。

1.1、创建存储函数

使用CREATE FUNCTION语句来创建存储函数。

创建存储函数的基本语法:

DELIMITER //
CREATE FUNCTION function_name (param1 type, param2 type, ...)
RETURNS return_type
DETERMINISTIC | NOT DETERMINISTIC
LANGUAGE SQL
BEGIN-- 函数体RETURN result;
END //
DELIMITER ;

解释:

  • function_name:函数的名称。
  • param1, param2, …:函数的参数列表,每个参数包括名称和类型。
  • RETURNS return_type:指定函数的返回值类型。
  • DETERMINISTIC | NOT DETERMINISTIC:指定函数是否是确定性的。如果函数对于相同的输入总是返回相同的结果,则为DETERMINISTIC;否则为NOT DETERMINISTIC。
  • LANGUAGE SQL:指定函数使用的语言,通常是SQL。
  • BEGIN … END:函数体,包含执行的逻辑。
  • RETURN result:返回结果。
1.2、示例1:简单的数学计算函数

假设我们想创建一个函数add_numbers,它接受两个整数作为参数,并返回它们的和。

示例:

DELIMITER //CREATE FUNCTION add_numbers(a INT, b INT)
RETURNS INT
DETERMINISTIC
BEGINDECLARE sum INT;SET sum = a + b;RETURN sum;
END //DELIMITER ;

运行结果:
在这里插入图片描述
调用示例:

SELECT add_numbers(5, 10);  -- 输出: 15

运行结果:
在这里插入图片描述

1.3、示例2:带有条件判断的函数

我们可以创建一个函数get_employee_level,它根据员工的工资返回其级别(如"Junior"、“Mid-level"或"Senior”)。

示例:

DELIMITER //CREATE FUNCTION get_employee_level(salary DECIMAL(10, 2))
RETURNS VARCHAR(20)
DETERMINISTIC
BEGINDECLARE level VARCHAR(20);IF salary > 80000 THENSET level = 'Senior';ELSEIF salary > 50000 THENSET level = 'Mid-level';ELSESET level = 'Junior';END IF;RETURN level;
END //DELIMITER ;

运行结果:
在这里插入图片描述

调用示例:

SELECT name, salary, get_employee_level(salary) AS level
FROM employees;

运行结果:
在这里插入图片描述

1.4、示例3:带有游标的函数

假设我们有一个表orders,我们想创建一个函数get_total_orders,它接受客户ID作为参数,并返回该客户的所有订单总额。

创建表的sql:

CREATE TABLE orders (id INT AUTO_INCREMENT PRIMARY KEY,          -- 订单的唯一标识符customer_id INT NOT NULL,                   -- 客户的唯一标识符order_date DATE NOT NULL,                   -- 订单的日期amount DECIMAL(10, 2) NOT NULL             -- 订单的金额
);

示例数据:
在这里插入图片描述
创建函数示例:

DELIMITER //CREATE FUNCTION get_total_orders(customer_id_p INT)
RETURNS DECIMAL(10, 2)
DETERMINISTIC
BEGINDECLARE total DECIMAL(10, 2) DEFAULT 0;DECLARE order_amount DECIMAL(10, 2);DECLARE done INT DEFAULT 0;DECLARE cur CURSOR FORSELECT amount FROM orders WHERE customer_id = customer_id_p;DECLARE CONTINUE HANDLER FOR NOT FOUND SET done = 1;OPEN cur;read_loop: LOOPFETCH cur INTO order_amount;IF done THENLEAVE read_loop;END IF;SET total = total + order_amount;END LOOP;CLOSE cur;RETURN total;
END //DELIMITER ;

解释:

  • DELIMITER //:更改分隔符为//,以便在函数体中使用;作为语句结束符,而不会提前终止函数定义。最后再将分隔符恢复为;。

  • CREATE FUNCTION get_total_orders(customer_id INT):创建一个名为get_total_orders的存储函数,接受一个INT类型的参数customer_id_p(注意入参不要和表字段相同),表示要查询的客户ID。

  • RETURNS DECIMAL(10, 2):指定函数返回一个DECIMAL(10, 2)类型的值,即订单总额,最多10位数字,其中2位是小数部分。

  • DETERMINISTIC:表示该函数对于相同的输入总是返回相同的结果。这意味着MySQL可以对其进行优化,因为它不会依赖外部状态或产生随机结果。

  • DECLARE total DECIMAL(10, 2) DEFAULT 0; :定义total,用于累加所有订单的金额,初始值为0。

  • DECLARE order_amount DECIMAL(10, 2); :定义order_amount,用于存储从游标中获取的每个订单的金额。

  • DECLARE done INT DEFAULT 0;:定义done,用于标记游标的遍历是否完成,初始值为0。当游标遍历到末尾时,done将被设置为1。

  • DECLARE cur CURSOR FOR:声明一个游标cur,用于遍历orders表中属于指定customer_id_p的所有订单的amount列。

  • SELECT amount FROM orders WHERE customer_id = customer_id_p; :这里的customer_id_p是函数的参数,表示我们要查询的客户ID。

  • DECLARE CONTINUE HANDLER FOR NOT FOUND SET done = 1; :当游标遍历到末尾(即没有更多行可以读取)时,MySQL会触发NOT FOUND异常。我们使用CONTINUE HANDLER来捕获这个异常,并将done设置为1,表示遍历结束。

  • OPEN cur:打开游标,准备从orders表中读取数据。

  • read_loop: LOOP:开始一个循环,逐行读取游标中的数据。

  • FETCH cur INTO order_amount:从游标中获取当前行的amount值,并将其存储在 order_amount变量中。

  • IF done THEN LEAVE read_loop:如果done被设置为1,表示游标已经遍历到末尾,则退出循环。

  • SET total = total + order_amount:将当前订单的金额累加到total中。

  • CLOSE cur:关闭游标,释放资源。

  • RETURN total:返回累加后的订单总额。

创建函数结果:
在这里插入图片描述
调用示例:

SELECT get_total_orders(2001);  -- 返回客户ID2001的所有订单总额

运行结果:
在这里插入图片描述

2、存储函数与存储过程的区别

在这里插入图片描述

3、存储函数的最佳实践

  • 保持函数简单:存储函数应该尽量简洁,避免过于复杂的逻辑。如果需要处理复杂的业务逻辑,考虑使用存储过程。
  • 使用DETERMINISTIC标记:如果函数对于相同的输入总是返回相同的结果,标记为DETERMINISTIC可以提高查询优化器的效率。
  • 避免副作用:存储函数不应该修改数据库中的数据,因为这可能会导致不可预测的行为。
  • 合理使用变量:在函数体内使用局部变量(DECLARE)来存储中间结果,避免重复计算。
  • 错误处理:使用SIGNAL语句抛出自定义错误,确保函数在遇到异常情况时能够正确处理。

4、自定义函数总结

MySQL的自定义函数功能非常强大,尤其是存储函数,允许你在数据库中封装复杂的逻辑并返回结果。通过合理使用存储函数,你可以简化SQL查询,提升代码的可读性和可维护性。

乘风破浪会有时,直挂云帆济沧海!!!

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

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

相关文章

STM32学习(十)

I2C模块内部结构 I2C(Inter-Integrated Circuit)模块是一种由Philips公司开发的二线式串行总线协议,用于短距离通信,允许多个设备共享相同的总线‌。 ‌硬件连接简单‌:I2C通信仅需要两条总线,即SCL&…

尚硅谷· vue3+ts 知识点学习整理 |14h的课程(持续更ing)

vue3 主要内容 核心:ref、reactive、computed、watch、生命周期 常用:hooks、自定义ref、路由、pinia、miit 面试:组件通信、响应式相关api ----> 笔记:ts快速梳理;vue3快速上手.pdf 笔记及大纲 如下&#xff…

【Ubuntu20.04】Apollo10.0 Docker容器部署+常见错误解决

官方参考文档【点击我】 Apollo 10.0 版本开始,支持本机和Docker容器两种部署方式。 如果您使用本机部署方式,建议使用x86_64架构的Ubuntu 22.04操作系统或者aarch64架构的Ubuntu 20.04操作系统。 如果您使用Docker容器部署方式,可以使用x…

安卓14无法安装应用解决历程

客户手机基本情况: 安卓14,对应的 targetSdkVersion 34 前天遇到了安卓14适配问题,客户发来的截图是这样的 描述:无法安装我们公司的B应用。 型号:三星google美版 解决步骤: 1、寻找其他安卓14手机测试…

利用 NineData 实现 PostgreSQL 到 Kafka 的高效数据同步

记录一次 PostgreSQL 到 Kafka 的数据迁移实践。前段时间,NineData 的某个客户在一个项目中需要将 PostgreSQL 的数据实时同步到 Kafka。需求明确且普遍: PostgreSQL 中的交易数据,需要实时推送到 Kafka,供下游多个系统消费&#…

Zookeeper是如何保证事务的顺序一致性的?

大家好,我是锋哥。今天分享关于【Zookeeper是如何保证事务的顺序一致性的?】面试题。希望对大家有帮助; Zookeeper是如何保证事务的顺序一致性的? 1000道 互联网大厂Java工程师 精选面试题-Java资源分享网 Zookeeper 通过多个机制来保证事务的顺序一…

电脑如何无线控制手机?

想在电脑上无线控制手机,需要用到Total Control控制软件,具体步骤如下: 1、首先我们在电脑上安装上控制软件Total Control并打开。 2、开启手机USB调试和ADB仅充电模式。 3、手机电脑均连接上相同局域网。 4、连接(首次使用需要用手机U…

内网穿透的应用-自托管文件分享系统PicoShare搭建流程与远程共享实战教程

文章目录 前言1. 本地安装Docker2. 本地部署PicoShare3. 如何使用PicoShare4. 公网远程访问本地 PicoShare4.1 内网穿透工具安装4.2 创建远程连接公网地址 5. 固定PicoShare公网地址 前言 大家好!在数字化时代,文件共享变得越来越重要,尤其是…

STM32 拓展 电源控制

目录 电源控制 电源框图 VDDA供电区域 VDD供电区域 1.8V低电压区域 后备供电区域 电压调节器 上电复位和掉电复位 可编程电压检测器(PVD) 低功耗 睡眠模式(只有CUP(老板)睡眠) 进入睡眠模式 退出睡眠模式 停机(停止)模式(只留核心区域(上班)) 进入停…

内蒙古水系详细很全shp格式arcgis软件无偏移坐标下载后内容测评

标题中的“内蒙古水系详细很全shp格式arcgis软件无偏移坐标”指的是一个地理信息系统(GIS)数据集,该数据集详细记录了内蒙古地区的水系信息,并以ESRI公司的标准矢量数据格式——Shapefile(.shp)进行存储。S…

【Rust自学】10.6. 生命周期 Pt.2:生命周期的语法与例子

喜欢的话别忘了点赞、收藏加关注哦,对接下来的教程有兴趣的可以关注专栏。谢谢喵!(・ω・) 10.6.1. 生命周期标注语法 生命周期的标注并不会改变引用的生命周期长度。如果某个函数它制定了泛型生命周期参数,那么它就可…

HTML 显示器纯色亮点检测工具

HTML 显示器纯色亮点检测工具 相关资源文件已经打包成html等文件,可双击直接运行程序,且文章末尾已附上相关源码,以供大家学习交流,博主主页还有更多Html相关程序案例,秉着开源精神的想法,望大家喜欢&#…

晨辉面试抽签和评分管理系统之一:考生信息管理和编排

晨辉面试抽签和评分管理系统(下载地址:www.chenhuisoft.cn)是公务员招录面试、教师资格考试面试、企业招录面试等各类面试通用的考生编排、考生入场抽签、候考室倒计时管理、面试考官抽签、面试评分记录和成绩核算的面试全流程信息化管理软件。提供了考生…

PHP7和PHP8的最佳实践

php 7 和 php 8 的最佳实践包括:使用类型提示以避免运行时错误;利用命名空间组织代码并避免命名冲突;采用命名参数、联合类型等新特性增强可读性;用错误处理优雅地处理异常;关注性能优化,如避免全局变量和选…

Vue 项目自动化部署:Coding + Jenkins + Nginx 实践分享

前言 本文详细记录如何使用 Coding (以 Jenkinsfile 为核心) 和 Nginx 部署 Vue 项目,包含完整流程、配置细节及注意事项,为开发者提供一个高效的实践参考。 准备工作 这里借用一个优秀的开源项目做演示:芋道源码/yudao-ui-admin-vue2。 以…

基于Arduino的FPV头部追踪相机系统

构建FPV头部追踪相机:让你置身于遥控车辆之中! 在遥控车辆和模型飞行器的世界中,第一人称视角(FPV)体验一直是爱好者们追求的目标。通过FPV头部追踪相机,你可以像坐在车辆或飞行器内部一样,自由…

【QT-QTableView实现鼠标悬浮(hover)行高亮显示+并设置表格样式】

1、自定义委托类 HoverDelegate hoverdelegate.h #ifndef HOVERDELEGATE_H #define HOVERDELEGATE_H#include <QObject> #include <QStyledItemDelegate>class hoverdelegate : public QStyledItemDelegate {Q_OBJECT // 添加 Q_OBJECT 宏public:explicit hoverde…

企业网络性能监控

什么是网络性能监控 网络性能监控&#xff08;NPM&#xff09;是指对计算机网络的性能进行持续测量、分析和管理的过程&#xff0c;通过监控流量、延迟、数据包丢失、带宽利用率和正常运行时间等关键指标&#xff0c;确保网络高效、安全地运行&#xff0c;并将停机时间降至最低…

【Vim Masterclass 笔记05】第 4 章:Vim 的帮助系统与同步练习(L14+L15+L16)

文章目录 Section 4&#xff1a;The Vim Help System&#xff08;Vim 帮助系统&#xff09;S04L14 Getting Help1 打开帮助系统2 退出帮助系统3 查看具体命令的帮助文档4 查看帮助文档中的主题5 帮助文档间的上翻、下翻6 关于 linewise7 查看光标所在术语名词的帮助文档8 关于退…

Zookeeper是如何解决脑裂问题的?

大家好&#xff0c;我是锋哥。今天分享关于【Zookeeper是如何解决脑裂问题的?】面试题。希望对大家有帮助&#xff1b; Zookeeper是如何解决脑裂问题的? 1000道 互联网大厂Java工程师 精选面试题-Java资源分享网 Zookeeper 通过一系列的机制来防止和解决脑裂&#xff08;sp…