MySQL之单行函数

目录

1. 函数的理解

单行函数

 2. 数值函数

2.1 基本函数

2.2 角度与弧度互换函数

2.3 三角函数

2.4 指数与对数

2.5 进制间的转换

3. 字符串函数

4. 日期和时间函数

4.1 获取日期、时间

4.2 日期与时间戳的转换​编辑

4.3 获取月份、星期、星期数、天数等函数

4.4 日期的操作函数

4.5 时间和秒钟转换的函数

4.6 计算日期和时间的函数​编辑

4.7 日期的格式化与解析​编辑

​编辑

5. 流程控制函数

6. 加密与解密函数

7. MySQL信息函数

8. 其他函数


1. 函数的理解

        函数在计算机语言的使用中贯穿始终,函数的作用是什么呢?它可以把我们经常使用的代码封装起来,需要的时候直接调用即可。这样既 提高了代码效率 ,又 提高了可维护性 。在 SQL 中我们也可以使用函数对检索出来的数据进行函数操作。使用这些函数,可以极大地 提高用户对数据库的管理效率

单行函数

  1. 操作数据对象
  2. 接受参数返回一个结果
  3. 只对一行进行变换
  4. 每行返回一个结果
  5. 可以嵌套
  6. 参数可以是一列或一个值

 2. 数值函数

2.1 基本函数

2.2 角度与弧度互换函数

2.3 三角函数

2.4 指数与对数

2.5 进制间的转换

#1.数值函数
#基本的操作
SELECT ABS(-123),ABS(32),SIGN(-23),SIGN(43),PI(),CEIL(32.32),CEILING(-43.23),FLOOR(32.32),FLOOR(-43.23),MOD(12, 5),12 MOD 5,12 % 5
FROM DUAL;#取随机数
SELECT RAND(), RAND(), RAND(10), RAND(10), RAND(-1), RAND(-1)
FROM DUAL;#四舍五入,截断操作
SELECT ROUND(123.556),ROUND(123.456, 0),ROUND(123.456, 1),ROUND(123.456, 2),ROUND(123.456, -1),ROUND(153.456, -2)
FROM DUAL;SELECT TRUNCATE(123.456, 0), TRUNCATE(123.496, 1), TRUNCATE(129.45, -1)
FROM DUAL;#单行函数可以嵌套
SELECT TRUNCATE(ROUND(123.456, 2), 0)
FROM DUAL;#角度与弧度的互换SELECT RADIANS(30),RADIANS(45),RADIANS(60),RADIANS(90),DEGREES(2 * PI()),DEGREES(RADIANS(60))
FROM DUAL;#三角函数
SELECT SIN(RADIANS(30)), DEGREES(ASIN(1)), TAN(RADIANS(45)), DEGREES(ATAN(1))
FROM DUAL;#指数和对数
SELECT POW(2, 5), POWER(2, 4), EXP(2)
FROM DUAL;SELECT LN(EXP(2)), LOG(EXP(2)), LOG10(10), LOG2(4)
FROM DUAL;#进制间的转换
SELECT BIN(10), HEX(10), OCT(10), CONV(10, 10, 8)
FROM DUAL;

3. 字符串函数

注意:MySQL中,字符串的位置是从1开始的。

# 在UTF-8中汉字占3个字节
SELECT ASCII('Abcdfsf'),CHAR_LENGTH('hello'),CHAR_LENGTH('我们'),LENGTH('hello'),LENGTH('我们')
FROM DUAL;# xxx worked for yyy
SELECT CONCAT(emp.last_name, ' worked for ', mgr.last_name) "details"
FROM employees empJOIN employees mgr
WHERE emp.`manager_id` = mgr.employee_id;SELECT CONCAT_WS('-', 'hello', 'world', 'hello', 'beijing')
FROM DUAL;
# 结果:hello-world-hello-beijing#字符串的索引是从1开始的!
# insert将从1开始的字符串(idx)之后的几个字符串(len)全替换为替换的内容
# replace 将对应内容替换为需要的内容
SELECT INSERT('helloworld', 2, 3, 'aaaaa'), REPLACE('hello', 'lol', 'mmm')
FROM DUAL;# upper转换为大写
# lower转换为小写
SELECT UPPER('HelLo'), LOWER('HelLo')
FROM DUAL;SELECT last_name, salary
FROM employees
WHERE LOWER(last_name) = 'King';# left(str ,x)取str左边的x个字符
# right(str ,x)取str右边的x个字符
SELECT LEFT('hello', 2), RIGHT('hello', 3), RIGHT('hello', 13)
FROM DUAL;# LPAD:实现右对齐效果
# RPAD:实现左对齐效果
SELECT employee_id, last_name, LPAD(salary, 10, ' ')
FROM employees;# trim(str):去除str开头和结尾的空格 trim(s1 from s)去除字符串s开始的s1
SELECT CONCAT('---', LTRIM('    h  el  lo   '), '***'),TRIM('oo' FROM 'ooheollo')
FROM DUAL;# repeat(str,x):重复str字符串x遍
# space(n):返回n个空格
# strcmp(s1,s2):比较s1和s2的大小,从第一个字母开始比较,相同比较下一个(正数前者大,0是一样大,负数是后者大)
SELECT REPEAT('hello', 4), LENGTH(SPACE(5)), STRCMP('abc', 'abe')
FROM DUAL;# substr(str ,indx,len):返回str从indx开始的长度是len个的字符串
# locate(substr ,str):返回substr(子字符串)在字符串str中第一次出现的位置,没有,返回0
SELECT SUBSTR('hello', 2, 2), LOCATE('lll', 'hello')
FROM DUAL;# elt(n,s1,s2,s3):n是几,返回第几个s
# field(s,s1,s2,s3...):返回字符串s在字符串列表中第一次出现的位置
# field_in_sec(s1,s2):返回字符串s1在字符串s2中出现的位置,字符串s2以一个逗号分隔的字符串
SELECT ELT(2, 'a', 'b', 'c', 'd'),FIELD('mm', 'gg', 'jj', 'mm', 'dd', 'mm'),FIND_IN_SET('mm', 'gg,mm,jj,dd,mm,gg')
FROM DUAL;# reverse(str):反转str字符串
# nullif(value1,value2);比较value1和value2字符串,相同返回null,不相同返回value1
SELECT employee_id, NULLIF(LENGTH(first_name), LENGTH(last_name)) "compare"
FROM employees;

4. 日期和时间函数

4.1 获取日期、时间

4.2 日期与时间戳的转换

4.3 获取月份、星期、星期数、天数等函数

4.4 日期的操作函数

4.5 时间和秒钟转换的函数

4.6 计算日期和时间的函数

4.7 日期的格式化与解析

上述 GET_FORMAT 函数中fmt参数常用的格式符: 

GET_FORMAT 函数中 date_type format_type 参数取值如下:
#3. 日期和时间函数
# 规范
# 描述
# %a 缩写工作日名称 (Sun..Sat)
# %b 缩写月份名称 (Jan..Dec)
# %c 月份,数字 (0..12)
# %D 带有英文后缀 (0th, , 1st, 2nd3rd, ...) 的月份中的某天
# %d 月份中的某天,数字 (00..31)
# %e 月份中的某天,数字 (0..31)
# %f 微秒 (000000..999999)
# %H 小时 (00..23)
# %h 小时 (01..12)
# %I 小时 (01..12)
# %i 分钟,数字 (00..59)
# %j 一年中的某天 (001..366)
# %k 小时 (0..23)
# %l 小时 (1..12)
# %M 月份名称 (January..December)
# %m 月份,数字 (00..12)
# %p AM 或 PM
# %r 时间,12 小时(hh:mm:ss 后跟 AM 或 PM)
# %S 秒 (00..59)
# %s 秒 (00..59)
# %T  时间,24 小时 (hh:mm:ss)
# %U  周 (00..53),其中星期日是一周的第一天; WEEK() 模式 0
# %u  周 (00..53),其中星期一是一周的第一天; WEEK() 模式 1
# %V Week (01..53),其中星期日是一周的第一天; WEEK() 模式 2;与 一起使用 %X
# %v Week (01..53),其中星期一是一周的第一天; WEEK() 模式 3;与 一起使用 %x
# %W 工作日名称 (Sunday..Saturday)
# %w 星期几 (0=星期日..6=星期六)
# %X 星期日是一周的第一天的周的年份,数字,四位数字;用于 %V
# %x Year 表示一周,其中 Monday 是一周的第一天,数字,四位数字;用于 %v
# %Y 年份、数字、四位数字
# %y 年份,数字 (两位数)#3.1  获取日期、时间
# curdate()和current_day():返回当前时间,只包含年月日
# curtime()和current_time():返回当前时间,只包含时分秒
# now()和sysdate()和current_timestamp()和localtime()和localtimestamp():返回当前系统时间
# utc_date():返回utc(世界标准时间)日期
# utc_time():返回utc(世界标准时间)时间 和北京时间相差8小时
SELECT CURDATE(),CURRENT_DATE(),CURTIME(),NOW(),SYSDATE(),UTC_DATE(),UTC_TIME()
FROM DUAL;SELECT CURDATE(), CURDATE() + 0, CURTIME() + 0, NOW() + 0
FROM DUAL;#3.2 日期与时间戳的转换
SELECT UNIX_TIMESTAMP(),UNIX_TIMESTAMP('2021-10-01 12:12:32'),FROM_UNIXTIME(1635173853),FROM_UNIXTIME(1633061552)
FROM DUAL;#3.3 获取月份、星期、星期数、天数等函数
#year(date)/month(date)/day(date):返回具体时间
# hour(time)/minute(time)/second(time):返回具体时间
# monthname(data):返回星期几
# weekday(data):返回周几 [注意周1是0,周2是1....]
# quarter(data):返回季度几(0范围是1~4)
# week(data):/weekofyear(data):返回一年中第几周
# dayofyear(data):返回一年中第几天
# dayofmonth(data):返回当前月中第几天
# dayofweek(data):返回周几 [注意周1是0,周2是1....]
SELECT YEAR(CURDATE()),MONTH(CURDATE()),DAY(CURDATE()),HOUR(CURTIME()),MINUTE(NOW()),SECOND(SYSDATE())
FROM DUAL;SELECT MONTHNAME('2024-11-15'),DAYNAME('2024-11-15'),WEEKDAY('2024-11-15'),QUARTER(CURDATE()),WEEK(CURDATE()),DAYOFYEAR(NOW()),DAYOFMONTH(NOW()),DAYOFWEEK(NOW())
FROM DUAL;#3.4 日期的操作函数
# EXTRACT(SECOND FROM NOW());返回当前时间秒
# EXTRACT(DAY FROM NOW()):返回当前月的第几天
# EXTRACT(HOUR_MINUTE FROM NOW()):返回当前时间小时和分
# EXTRACT(QUARTER FROM 'XXXX-xx-xx'):返回XXXX-xx-xx时间所在的季度
SELECT EXTRACT(SECOND FROM NOW()),EXTRACT(DAY FROM NOW()),EXTRACT(HOUR_MINUTE FROM NOW()),EXTRACT(QUARTER FROM '2024-11-15')
FROM DUAL;#3.5 时间和秒钟转换的函数
# TIME_TO_SEC(time):将time转换成秒 小时*3600+分*60+秒
# SEC_TO_TIME(seconds):将seconds(秒)转换成包含小时,分钟,秒的时间
SELECT TIME_TO_SEC(CURTIME()),#CURTIME():获取当前时间SEC_TO_TIME(83355)
FROM DUAL;#3.6 计算日期和时间的函数
# DATE_ADD(时间,INTERVAL x YEAR/month/day/hour/minute/second):在time(时间)上加上或减去x(时间),可以是年/月/日/时/分/秒
SELECT NOW(),DATE_ADD(NOW(), INTERVAL 1 YEAR),DATE_ADD(NOW(), INTERVAL -1 YEAR),DATE_SUB(NOW(), INTERVAL 1 YEAR)
FROM DUAL;# MINUTE:分钟  SECOND:秒
SELECT DATE_ADD(NOW(), INTERVAL 1 DAY)                               AS col1,DATE_ADD('2024-11-15 11:23:20', INTERVAL 1 SECOND)            AS col2,ADDDATE('2024-11-15 11:23:20', INTERVAL 1 SECOND)             AS col3,DATE_ADD('2024-11-15 11:23:20', INTERVAL '1_1' MINUTE_SECOND) AS col4,DATE_ADD(NOW(), INTERVAL -1 YEAR)                             AS col5, #可以是负数DATE_ADD(NOW(), INTERVAL '1_1' YEAR_MONTH)                    AS col6  #需要单引号
FROM DUAL;# SUBTIME:减时间  ADDTIME:加时间
# MAKETIME(hour,minute,second):将给定时间组合时间返回
# DATEDIFF(data1,data2):返回两个时间相差天数
# TIMEDIFF(time1,time2):返回两个时间相差时间间隔
# TO_DAYS(data):返回从data距离0000年1月1日的天数
# LAST_DAY(data):返回data在的月距离最后一天的日期
# MAKEDATE(YEAR ,n)对给的年份和所在年的天数返回一个日期
# PERIOD_ADD(time,n)返回time加n后的时间
SELECT ADDTIME(NOW(), 20),SUBTIME(NOW(), 30),SUBTIME(NOW(), '1:1:3'),DATEDIFF(NOW(), '2024-10-01'),TIMEDIFF(NOW(), '2024-11-15 11:23:20'),FROM_DAYS(366),TO_DAYS('0000-12-25'),LAST_DAY(NOW()),MAKEDATE(YEAR(NOW()), 32),MAKETIME(10, 21, 23),PERIOD_ADD(20200101010101, 10)
FROM DUAL;
# 结果
# 2024-11-15 11:53:52,
# 2024-11-15 11:53:02,
# 2024-11-15 10:52:29,
# 45,
# 00:30:12,
# 0001-01-01,
# 359,2024-11-30,
# 2024-02-01,
# 10:21:23,
# 20200101010111#3.7 日期的格式化与解析
# 格式化:日期 ---> 字符串
# 解析:  字符串 ----> 日期#此时我们谈的是日期的显式格式化和解析#之前,我们接触过隐式的格式化或解析
SELECT *
FROM employees
WHERE hire_date = '1993-01-13';#格式化:
# DATE_FORMAT(data,fmt):按照fmt字符串格式格式化日期data值
# TIME_FORMAT(time,fmt):按照fmt字符串格式格式化时间time值
# %Y :4位是年                           %y:两位是年份
# %M:月(january)                       %m:两位是月份(01,02,03...)
# %D:英文后缀表示月的天数(1st,2nd,3rd)    %d:两位数字表示月中天数(01,0,2,03...)
# %c:数字表示月份(1,2,3,...)             %b:缩写的月名(jan,feb)
# %e:数字形式表示月的天数(1,2,3,4,5...)# %H:24小时制 (小数形式)                  %h和%l:12小时制(两位数字)(01,02,03,...)
# %k:24小时制 (数字形式)                 %l:12小时制 (数字形式)     (1,2,3...)
# %i:两位数字表示分钟(00,01,02...)        %S和%s:两位数字表示秒(00,01,02...)
SELECT DATE_FORMAT(CURDATE(), '%Y-%M-%D'),DATE_FORMAT(NOW(), '%Y-%m-%d'),TIME_FORMAT(CURTIME(), '%h:%i:%S'),DATE_FORMAT(NOW(), '%Y-%M-%D %h:%i:%S %W %w %T %r')
FROM DUAL;#解析:格式化的逆过程
# STR_TO_DATE(str,dmt):按照字符串fmt对str解析为日期
# GET_FORMAT(sata_type,fromat_type):返回日期字符串的显示格式
SELECT STR_TO_DATE('2021-October-25th 11:37:30 Monday 1', '%Y-%M-%D %h:%i:%S %W %w')
FROM DUAL;SELECT GET_FORMAT(DATE, 'USA')
FROM DUAL;SELECT DATE_FORMAT(CURDATE(), GET_FORMAT(DATE, 'USA'))
FROM DUAL;

5. 流程控制函数

#4.1 IF(VALUE,VALUE1,VALUE2)SELECT last_name, salary, IF(salary >= 6000, '高工资', '低工资') "details"
FROM employees;SELECT last_name,commission_pct,IF(commission_pct IS NOT NULL, commission_pct, 0)                     "details",salary * 12 * (1 + IF(commission_pct IS NOT NULL, commission_pct, 0)) "annual_sal"
FROM employees;#4.2 IFNULL(VALUE1,VALUE2):看做是IF(VALUE,VALUE1,VALUE2)的特殊情况
SELECT last_name, commission_pct, IFNULL(commission_pct, 0) "details"
FROM employees;#4.3 CASE WHEN ... THEN ...WHEN ... THEN ... ELSE ... END
# 类似于java的if ... else if ... else if ... else
SELECT last_name,salary,CASEWHEN salary >= 15000 THEN '白骨精'WHEN salary >= 10000 THEN '潜力股'WHEN salary >= 8000 THEN '小屌丝'ELSE '草根' END "details",department_id
FROM employees;SELECT last_name,salary,CASEWHEN salary >= 15000 THEN '白骨精'WHEN salary >= 10000 THEN '潜力股'WHEN salary >= 8000 THEN '小屌丝'END "details"
FROM employees;#4.4 CASE ... WHEN ... THEN ... WHEN ... THEN ... ELSE ... END
# 类似于java的swich ... case...
/*练习1
查询部门号为 10,20, 30 的员工信息,
若部门号为 10, 则打印其工资的 1.1 倍,
20 号部门, 则打印其工资的 1.2 倍,
30 号部门,打印其工资的 1.3 倍数,
其他部门,打印其工资的 1.4 倍数*/
SELECT employee_id,last_name,department_id,salary,CASE department_idWHEN 10 THEN salary * 1.1WHEN 20 THEN salary * 1.2WHEN 30 THEN salary * 1.3ELSE salary * 1.4 END "details"
FROM employees;/*练习2
查询部门号为 10,20, 30 的员工信息,
若部门号为 10, 则打印其工资的 1.1 倍,
20 号部门, 则打印其工资的 1.2 倍,
30 号部门打印其工资的 1.3 倍数*/
SELECT employee_id,last_name,department_id,salary,CASE department_idWHEN 10 THEN salary * 1.1WHEN 20 THEN salary * 1.2WHEN 30 THEN salary * 1.3END "details"
FROM employees
WHERE department_id IN (10, 20, 30);

6. 加密与解密函数

7. MySQL信息函数

8. 其他函数

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

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

相关文章

文档加密怎么做才安全?

公司的文档包含很多机密文件,这些文件不仅关乎公司的核心竞争力,还涉及到客户隐私、商业策略等敏感信息。因此,文档的保管和传递一直是我们工作的重中之重。 为了确保机密文件的安全,公司需要制定了一系列严格的保密措施。从文件的…

golang debug调试

1. 本地调试 1:Add Configurations 添加配置文件(Run kind :Directory) 2:进入run运行窗口 3:debug断点调试模式 1. Resume Program (继续运行) 图标: ▶️ 或 ► 快捷键: F9(Windows/Linux&a…

计算机毕业设计Hadoop+Spark音乐推荐系统 音乐预测系统 音乐可视化大屏 音乐爬虫 HDFS hive数据仓库 机器学习 深度学习 大数据毕业设计

温馨提示:文末有 CSDN 平台官方提供的学长联系方式的名片! 温馨提示:文末有 CSDN 平台官方提供的学长联系方式的名片! 温馨提示:文末有 CSDN 平台官方提供的学长联系方式的名片! 作者简介:Java领…

基础入门-Web应用架构搭建域名源码站库分离MVC模型解析受限对应路径

知识点: 1、基础入门-Web应用-域名上的技术要点 2、基础入门-Web应用-源码上的技术要点 3、基础入门-Web应用-数据上的技术要点 4、基础入门-Web应用-解析上的技术要点 5、基础入门-Web应用-平台上的技术要点 一、演示案例-域名差异-主站&分站&端口站&…

leetcode:LCR 139. 训练计划 I(python3解法)

难度:简单 教练使用整数数组 actions 记录一系列核心肌群训练项目编号。为增强训练趣味性,需要将所有奇数编号训练项目调整至偶数编号训练项目之前。请将调整后的训练项目编号以 数组 形式返回。 示例 1: 输入:actions [1,2,3,4,…

selinux、firewalld

一、selinux 1、selinux(是Security-Enhanced Linux)------ 安全强化的linux 2、selinux的工作原理 2.1 工作原理 ------- SELinux是通过MAC的方式来控制管理进程,它控制的主体是进程,而目标则是该进程能否读取的文件资源。 主…

wordpress网站首页底部栏显示网站备案信息

一、页脚文件footer.php 例如,wordpress主题使用的是simple-life主题,服务器IP为192.168.68.89,在wordpress主题文件中有个页脚文件footer.php,这是一个包含网站页脚代码的文件。 footer.php 路径如下: /www/wwwroot/192.168.68…

AI需求条目化全面升级!支持多格式需求,打破模板限制!

AI需求条目化全面升级!支持多格式需求,打破模板限制! 一、多格兼济 标准立成 1、功能揭秘 预览未来 平台需求板块的AI需求条目化功能迎来全面升级。它支持多种需求格式,不再受限于模板文件,能够一键自动快速且灵活地生…

【c++篇】:解读Set和Map的封装原理--编程中的数据结构优化秘籍

✨感谢您阅读本篇文章,文章内容是个人学习笔记的整理,如果哪里有误的话还请您指正噢✨ ✨ 个人主页:余辉zmh–CSDN博客 ✨ 文章所属专栏:c篇–CSDN博客 文章目录 前言一.set和map的初步封装1.树的节点封装修改2.Find()查找函数3.红…

机器学习实战:泰坦尼克号乘客生存率预测(数据处理+特征工程+建模预测)

项目描述 任务:根据训练集数据中的数据预测泰坦尼克号上哪些乘客能生存下来 数据源:csv文件(train.csv) 目标变量:Survived(0-1变量) 数据集预览: 1、英文描述: 2、…

Linux自动化部署方法(Linux Automated Deployment Method)

💝💝💝欢迎来到我的博客,很高兴能够在这里和您见面!希望您在这里可以感受到一份轻松愉快的氛围,不仅可以获得有趣的内容和知识,也可以畅所欲言、分享您的想法和见解。 本人主要分享计算机核心技…

嵌入式 FPGA开发

目录 一、引言 二、当前嵌入式 FPGA 开发的现状 三、嵌入式 FPGA 开发的优势 四、嵌入式 FPGA 的应用领域 1. 通信系统 2. 数字信号处理 3. 视频图像处理 4. 高速接口设计 5. 人工智能 6. IC 设计与 PCB 设计类比 五、嵌入式 FPGA 未来发展趋势 六、结论 一、引言 …

工业AI质检 AI质检智能系统 尤劲恩(上海)信息科技有限公司

来的现代化工厂,将逐步被无人化车间取代,无人工厂除了产线自动化,其无人质检将是绕不开的话题。尤劲恩致力于帮助工业制造领域上下游工厂减员增效、提高品质效率,真正实现无人质检IQC/IPQC/OQC的在线质检系统。分析生产环节真实品…

Angular v19 (三):增量水合特性详解 - 什么是水合过程?有哪些应用场景?与 Qwik 相比谁更胜一筹?- 哪个技术好我就学哪个,这就是吸心大法吧

Angular在其最新版本 v19 中引入了增量水合(Incremental Hydration)这一特性。这一更新引发了开发者们广泛的讨论,特别是在优化首屏加载速度和改善用户体验方面。本文将详解水合过程的概念、增量水合的应用场景,以及它与类似框架如…

[STM32]从零开始的STM32 FreeRTOS移植教程

一、前言 如果能看到这个教程的话,说明大家已经学习嵌入式有一段时间了。还记得嵌入式在大多数时候指的是什么吗?是的,我们所说的学习嵌入式大部分时候都是在学习嵌入式操作系统。从简单的一些任务状态机再到复杂一些的RTOS,再到最…

Vivado程序固化到Flash

在上板调试FPGA时,通常使用JTAG接口下载程序到FPGA芯片中,FPGA本身是基于RAM工艺的器件,因此掉电后会丢失芯片内的程序,需要重新烧写程序。但是当程序需要投入使用时不能每一次都使用JTAG接口下载程序,一般FPGA的外围会…

医疗废物检测

3809总图像数 数据集分割 训练组80% 3030图片 有效集20% 779图片 测试集% 0图片 标签 预处理 自动定向: 已应用 调整大小: 拉伸至 640x640 增强 未应用任何增强。 注射器 手术刀 输液管 医用手套 医用口罩 血渍 数据集…

如何进行JOIN优化

如何进行JOIN优化 简单来说,JOIN是MySQL用来进行联表操作的,用来匹配两个表的数据,筛选并合并符合我们要求的结果集,但使用了Join我们一般会对它多一点关注,在java开发手册中,禁止三个表以上关联使用Join&…

uniapp使用扩展组件uni-data-select出现的问题汇总

前言 不知道大家有没有学习过我的这门课程那,《uniCloud云开发Vue3版本官方推荐用法》,这么课程已经得到了官方推荐,想要快速上手unicloud的小伙伴们,可以学习一下这么课程哦,不要忘了给一键三连呀。 在录制这门课程…

Spring 自调用事务失效分析及解决办法

前言 博主在写公司需求的时候,有一个操作涉及到多次对数据库数据的修改。当时就想着要加 Transactional注解来声名事务。并且由于一个方法中有太多行了,于是就想着修改数据库的操作单独提取出来抽象成一个方法。但这个时候,IDEA 提示我自调用…