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

玩转Mysql系列 - 第18篇:流程控制语句(高手进阶)

这是Mysql系列第18篇。

环境:mysql5.7.25,cmd命令中进行演示。

代码中被[]包含的表示可选,|符号分开的表示可选其一。

上一篇存储过程&自定义函数,对存储过程和自定义函数做了一个简单的介绍,但是如何能够写出复杂的存储过程和函数呢?

这需要我们熟练掌握流程控制语句才可以,本文主要介绍mysql中流程控制语句的使用,上干货。

本篇内容

  • if函数

  • case语句

  • if结构

  • while循环

  • repeat循环

  • loop循环

  • 循环体控制语句

准备数据

/*建库javacode2018*/
drop database if exists javacode2018;
create database javacode2018;/*切换到javacode2018库*/
use javacode2018;/*创建表:t_user*/
DROP TABLE IF EXISTS t_user;
CREATE TABLE t_user(id int PRIMARY KEY COMMENT '编号',sex TINYINT not null DEFAULT 1 COMMENT '性别,1:男,2:女',name VARCHAR(16) not NULL DEFAULT '' COMMENT '姓名'
)COMMENT '用户表';/*插入数据*/
INSERT INTO t_user VALUES
(1,1,'路人甲Java'),(2,1,'张学友'),(3,2,'王祖贤'),(4,1,'郭富城'),(5,2,'李嘉欣');SELECT * FROM t_user;DROP TABLE IF EXISTS test1;
CREATE TABLE test1 (a int not null);DROP TABLE IF EXISTS test2;
CREATE TABLE test2 (a int not null,b int NOT NULL );

if函数

语法

if(条件表达式,值1,值2);

if函数有3个参数。

当参数1为true的时候,返回值1,否则返回值2

示例

需求:查询t_user表数据,返回:编号、性别(男、女)、姓名。

分析一下:数据库中性别用数字表示的,我们需要将其转换为(男、女),可以使用if函数。

mysql> SELECT id 编号,if(sex=1,'男','女') 性别,name 姓名 FROM t_user;
+--------+--------+---------------+
| 编号   | 性别   | 姓名          |
+--------+--------+---------------+
|      1 | 男     | 路人甲Java    |
|      2 | 男     | 张学友        |
|      3 | 女     | 王祖贤        |
|      4 | 男     | 郭富城        |
|      5 | 女     | 李嘉欣        |
+--------+--------+---------------+
5 rows in set (0.00 sec)

CASE结构

2种用法。

第1种用法

类似于java中的switch语句。

case 表达式
when 值1 then 结果1或者语句1(如果是语句需要加分号)
when 值2 then 结果2或者语句2
...
else 结果n或者语句n
end [case] (如果是放在begin end之间需要加case,如果在select后则不需要)
示例1:select中使用

查询t_user表数据,返回:编号、性别(男、女)、姓名。

/*写法1:类似于java中的if else*/
SELECT id 编号,(CASE sex WHEN 1 THEN '男' ELSE '女' END) 性别,name 姓名 FROM t_user;
/*写法2:类似于java中的if else if*/
SELECT id 编号,(CASE sex WHEN 1 then '男' WHEN 2 then '女' END) 性别,name 姓名 FROM t_user;
示例2:begin end中使用

写一个存储过程,接受3个参数:id,性别(男、女),姓名,然后插入到t_user表

创建存储过程:

/*删除存储过程proc1*/
DROP PROCEDURE IF EXISTS proc1;
/*s删除id=6的记录*/
DELETE FROM t_user WHERE id=6;
/*声明结束符为$*/
DELIMITER $
/*创建存储过程proc1*/
CREATE PROCEDURE proc1(id int,sex_str varchar(8),name varchar(16))BEGIN/*声明变量v_sex用于存放性别*/DECLARE v_sex TINYINT UNSIGNED;/*根据sex_str的值来设置性别*/CASE sex_strwhen '男' THENSET v_sex = 1;WHEN '女' THENSET v_sex = 2;END CASE ;/*插入数据*/INSERT INTO t_user VALUES (id,v_sex,name);END $
/*结束符置为;*/
DELIMITER ;

调用存储过程:

CALL proc1(6,'男','郭富城');

查看效果:

mysql> select * from t_user;
+----+-----+---------------+
| id | sex | name          |
+----+-----+---------------+
|  1 |   1 | 路人甲Java    |
|  2 |   1 | 张学友        |
|  3 |   2 | 王祖贤        |
|  4 |   1 | 郭富城        |
|  5 |   2 | 李嘉欣        |
|  6 |   1 | 郭富城        |
+----+-----+---------------+
6 rows in set (0.00 sec)

示例3:函数中使用

需求:写一个函数,根据t_user表sex的值,返回男女

创建函数:

/*删除存储过程proc1*/
DROP FUNCTION IF EXISTS fun1;
/*声明结束符为$*/
DELIMITER $
/*创建存储过程proc1*/
CREATE FUNCTION fun1(sex TINYINT UNSIGNED)RETURNS varchar(8)BEGIN/*声明变量v_sex用于存放性别*/DECLARE v_sex VARCHAR(8);CASE sexWHEN 1 THENSET v_sex:='男';ELSESET v_sex:='女';END CASE;RETURN v_sex;END $
/*结束符置为;*/
DELIMITER ;

看一下效果:

mysql> select sex, fun1(sex) 性别,name FROM t_user;
+-----+--------+---------------+
| sex | 性别   | name          |
+-----+--------+---------------+
|   1 | 男     | 路人甲Java    |
|   1 | 男     | 张学友        |
|   2 | 女     | 王祖贤        |
|   1 | 男     | 郭富城        |
|   2 | 女     | 李嘉欣        |
|   1 | 男     | 郭富城        |
+-----+--------+---------------+
6 rows in set (0.00 sec)

第2种用法

类似于java中多重if语句。

case
when 条件1 then 结果1或者语句1(如果是语句需要加分号)
when 条件2 then 结果2或者语句2
...
else 结果n或者语句n
end [case] (如果是放在begin end之间需要加case,如果是在select后面case可以省略)

这种写法和1中的类似,大家用上面这种语法实现第1中用法中的3个示例,贴在留言中。

if结构

if结构类似于java中的 if..else if…else的语法,如下:

if 条件语句1 then 语句1;
elseif 条件语句2 then 语句2;
...
else 语句n;
end if;

只能使用在begin end之间。

示例

写一个存储过程,实现用户数据的插入和新增,如果id存在,则修改,不存在则新增,并返回结果

/*删除id=7的记录*/
DELETE FROM t_user WHERE id=7;
/*删除存储过程*/
DROP PROCEDURE IF EXISTS proc2;
/*声明结束符为$*/
DELIMITER $
/*创建存储过程*/
CREATE PROCEDURE proc2(v_id int,v_sex varchar(8),v_name varchar(16),OUT result TINYINT)BEGINDECLARE v_count TINYINT DEFAULT 0;/*用来保存user记录的数量*//*根据v_id查询数据放入v_count中*/select count(id) into v_count from t_user where id = v_id;/*v_count>0表示数据存在,则修改,否则新增*/if v_count>0 THENBEGINDECLARE lsex TINYINT;select if(lsex='男',1,2) into lsex;update t_user set sex = lsex,name = v_name where id = v_id;/*获取update影响行数*/select ROW_COUNT() INTO result;END;elseBEGINDECLARE lsex TINYINT;select if(lsex='男',1,2) into lsex;insert into t_user VALUES (v_id,lsex,v_name);select 0 into result;END;END IF;END $
/*结束符置为;*/
DELIMITER ;

看效果:

mysql> SELECT * FROM t_user;
+----+-----+---------------+
| id | sex | name          |
+----+-----+---------------+
|  1 |   1 | 路人甲Java    |
|  2 |   1 | 张学友        |
|  3 |   2 | 王祖贤        |
|  4 |   1 | 郭富城        |
|  5 |   2 | 李嘉欣        |
|  6 |   1 | 郭富城        |
+----+-----+---------------+
6 rows in set (0.00 sec)mysql> CALL proc2(7,'男','黎明',@result);
Query OK, 1 row affected (0.00 sec)mysql> SELECT @result;
+---------+
| @result |
+---------+
|       0 |
+---------+
1 row in set (0.00 sec)mysql> SELECT * FROM t_user;
+----+-----+---------------+
| id | sex | name          |
+----+-----+---------------+
|  1 |   1 | 路人甲Java    |
|  2 |   1 | 张学友        |
|  3 |   2 | 王祖贤        |
|  4 |   1 | 郭富城        |
|  5 |   2 | 李嘉欣        |
|  6 |   1 | 郭富城        |
|  7 |   2 | 黎明          |
+----+-----+---------------+
7 rows in set (0.00 sec)mysql> CALL proc2(7,'男','梁朝伟',@result);
Query OK, 1 row affected (0.00 sec)mysql> SELECT @result;
+---------+
| @result |
+---------+
|       1 |
+---------+
1 row in set (0.00 sec)mysql> SELECT * FROM t_user;
+----+-----+---------------+
| id | sex | name          |
+----+-----+---------------+
|  1 |   1 | 路人甲Java    |
|  2 |   1 | 张学友        |
|  3 |   2 | 王祖贤        |
|  4 |   1 | 郭富城        |
|  5 |   2 | 李嘉欣        |
|  6 |   1 | 郭富城        |
|  7 |   2 | 梁朝伟        |
+----+-----+---------------+
7 rows in set (0.00 sec)

循环

mysql中循环有3种写法

  1. while:类似于java中的while循环

  2. repeat:类似于java中的do while循环

  3. loop:类似于java中的while(true)死循环,需要在内部进行控制。

循环控制

对循环内部的流程进行控制,如:

结束本次循环

类似于java中的continue

iterate 循环标签;
退出循环

类似于java中的break

leave 循环标签;

下面我们分别介绍3种循环的使用。

while循环

类似于java中的while循环。

语法

[标签:]while 循环条件 do
循环体
end while [标签];

标签:是给while取个名字,标签和iterateleave结合用于在循环内部对循环进行控制:如:跳出循环、结束本次循环。

注意:这个循环先判断条件,条件成立之后,才会执行循环体,每次执行都会先进行判断。

示例1:无循环控制语句

根据传入的参数v_count向test1表插入指定数量的数据。

/*删除test1表记录*/
DELETE FROM test1;
/*删除存储过程*/
DROP PROCEDURE IF EXISTS proc3;
/*声明结束符为$*/
DELIMITER $
/*创建存储过程*/
CREATE PROCEDURE proc3(v_count int)BEGINDECLARE i int DEFAULT 1;a:WHILE i<=v_count DOINSERT into test1 values (i);SET i=i+1;END WHILE;END $
/*结束符置为;*/
DELIMITER ;

见效果:

mysql> CALL proc3(5);
Query OK, 1 row affected (0.01 sec)mysql> SELECT * from test1;
+---+
| a |
+---+
| 1 |
| 2 |
| 3 |
| 4 |
| 5 |
+---+
5 rows in set (0.00 sec)

示例2:添加leave控制语句

根据传入的参数v_count向test1表插入指定数量的数据,当插入超过10条,结束。

/*删除存储过程*/
DROP PROCEDURE IF EXISTS proc4;
/*声明结束符为$*/
DELIMITER $
/*创建存储过程*/
CREATE PROCEDURE proc4(v_count int)BEGINDECLARE i int DEFAULT 1;a:WHILE i<=v_count DOINSERT into test1 values (i);/*判断i=10,离开循环a*/IF i=10 THENLEAVE a;END IF;SET i=i+1;END WHILE;END $
/*结束符置为;*/
DELIMITER ;

见效果:

mysql> DELETE FROM test1;
Query OK, 20 rows affected (0.00 sec)mysql> CALL proc4(20);
Query OK, 1 row affected (0.02 sec)mysql> SELECT * from test1;
+----+
| a  |
+----+
|  1 |
|  2 |
|  3 |
|  4 |
|  5 |
|  6 |
|  7 |
|  8 |
|  9 |
| 10 |
+----+
10 rows in set (0.00 sec)

示例3:添加iterate控制语句

根据传入的参数v_count向test1表插入指定数量的数据,只插入偶数数据。

/*删除test1表记录*/
DELETE FROM test1;
/*删除存储过程*/
DROP PROCEDURE IF EXISTS proc5;
/*声明结束符为$*/
DELIMITER $
/*创建存储过程*/
CREATE PROCEDURE proc5(v_count int)BEGINDECLARE i int DEFAULT 0;a:WHILE i<=v_count DOSET i=i+1;/*如果i不为偶数,跳过本次循环*/IF i%2!=0 THENITERATE a;END IF;/*插入数据*/INSERT into test1 values (i);END WHILE;END $
/*结束符置为;*/
DELIMITER ;

见效果:

mysql> DELETE FROM test1;
Query OK, 5 rows affected (0.00 sec)mysql> CALL proc5(10);
Query OK, 1 row affected (0.01 sec)mysql> SELECT * from test1;
+----+
| a  |
+----+
|  2 |
|  4 |
|  6 |
|  8 |
| 10 |
+----+
5 rows in set (0.00 sec)

示例4:嵌套循环

test2表有2个字段(a,b),写一个存储过程(2个参数:v_a_count,v_b_count),使用双重循环插入数据,数据条件:a的范围[1,v_a_count]、b的范围[1,v_b_count]所有偶数的组合。

/*删除存储过程*/
DROP PROCEDURE IF EXISTS proc8;
/*声明结束符为$*/
DELIMITER $
/*创建存储过程*/
CREATE PROCEDURE proc8(v_a_count int,v_b_count int)BEGINDECLARE v_a int DEFAULT 0;DECLARE v_b int DEFAULT 0;a:WHILE v_a<=v_a_count DOSET v_a=v_a+1;SET v_b=0;b:WHILE v_b<=v_b_count DOSET v_b=v_b+1;IF v_a%2!=0 THENITERATE a;END IF;IF v_b%2!=0 THENITERATE b;END IF;INSERT INTO test2 VALUES (v_a,v_b);END WHILE b;END WHILE a;END $
/*结束符置为;*/
DELIMITER ;

代码中故意将ITERATE a;放在内层循环中,主要让大家看一下效果。

见效果:

mysql> DELETE FROM test2;
Query OK, 6 rows affected (0.00 sec)mysql> CALL proc8(4,6);
Query OK, 1 row affected (0.01 sec)mysql> SELECT * from test2;
+---+---+
| a | b |
+---+---+
| 2 | 2 |
| 2 | 4 |
| 2 | 6 |
| 4 | 2 |
| 4 | 4 |
| 4 | 6 |
+---+---+
6 rows in set (0.00 sec)

repeat循环

语法

[标签:]repeat
循环体;
until 结束循环的条件 end repeat [标签];

repeat循环类似于java中的do…while循环,不管如何,循环都会先执行一次,然后再判断结束循环的条件,不满足结束条件,循环体继续执行。这块和while不同,while是先判断条件是否成立再执行循环体。

示例1:无循环控制语句

根据传入的参数v_count向test1表插入指定数量的数据。

/*删除存储过程*/
DROP PROCEDURE IF EXISTS proc6;
/*声明结束符为$*/
DELIMITER $
/*创建存储过程*/
CREATE PROCEDURE proc6(v_count int)BEGINDECLARE i int DEFAULT 1;a:REPEATINSERT into test1 values (i);SET i=i+1;UNTIL i>v_count END REPEAT;END $
/*结束符置为;*/
DELIMITER ;

见效果:

mysql> DELETE FROM test1;
Query OK, 1 row affected (0.00 sec)mysql> CALL proc6(5);
Query OK, 1 row affected (0.01 sec)mysql> SELECT * from test1;
+---+
| a |
+---+
| 1 |
| 2 |
| 3 |
| 4 |
| 5 |
+---+
5 rows in set (0.00 sec)

repeat中iterateleave用法和while中类似,这块的示例算是给大家留的作业,写好的发在留言区,谢谢。

loop循环

语法

[标签:]loop
循环体;
end loop [标签];

loop相当于一个死循环,需要在循环体中使用iterate或者leave来控制循环的执行。

示例1:无循环控制语句

根据传入的参数v_count向test1表插入指定数量的数据。

/*删除存储过程*/
DROP PROCEDURE IF EXISTS proc7;
/*声明结束符为$*/
DELIMITER $
/*创建存储过程*/
CREATE PROCEDURE proc7(v_count int)BEGINDECLARE i int DEFAULT 0;a:LOOPSET i=i+1;/*当i>v_count的时候退出循环*/IF i>v_count THENLEAVE a;END IF;INSERT into test1 values (i);END LOOP a;END $
/*结束符置为;*/
DELIMITER ;

见效果:

mysql> DELETE FROM test1;
Query OK, 5 rows affected (0.00 sec)mysql> CALL proc7(5);
Query OK, 1 row affected (0.01 sec)mysql> SELECT * from test1;
+---+
| a |
+---+
| 1 |
| 2 |
| 3 |
| 4 |
| 5 |
+---+
5 rows in set (0.00 sec)

loop中iterateleave用法和while中类似,这块的示例算是给大家留的作业,写好的发在留言区,谢谢。

总结

  1. 本文主要介绍了mysql中控制流语句的使用,请大家下去了多练习,熟练掌握

  2. if函数常用在select中

  3. case语句有2种写法,主要用在select、begin end中,select中end后面可以省略case,begin end中使用不能省略case

  4. if语句用在begin end中

  5. 3种循环体的使用,while类似于java中的while循环,repeat类似于java中的do while循环,loop类似于java中的死循环,都用于begin end中

  6. 循环中体中的控制依靠leaveiterateleave类似于java中的break可以退出循环,iterate类似于java中的continue可以结束本次循环

相关文章:

玩转Mysql系列 - 第18篇:流程控制语句(高手进阶)

这是Mysql系列第18篇。 环境&#xff1a;mysql5.7.25&#xff0c;cmd命令中进行演示。 代码中被[]包含的表示可选&#xff0c;|符号分开的表示可选其一。 上一篇存储过程&自定义函数&#xff0c;对存储过程和自定义函数做了一个简单的介绍&#xff0c;但是如何能够写出复…...

LED屏幕电流驱动设计原理

LED电子显示屏作为户外最大的应用产品&#xff0c;是大型娱乐&#xff0c;体育赛事&#xff0c;广场大屏幕等场所不可或缺的产品&#xff0c;从单双色简单的文字展示到今天的高清全彩&#xff0c;显示屏的技术一直都在进步&#xff0c;全球80%的LED电子显示屏皆产自于中国。显示…...

shell知识点复习

1、shell能做什么&#xff08; Shell可以做任何事(一切取决于业务需求) &#xff09; 自动化批量系统初始化程序 自动化批量软件部署程序 应用管理程序 日志分析处理程序 自动化备份恢复程序 自动化管理程序 自动化信息采集及监控程序 配合Zabbix信息采集 自动化扩容 2、获取当…...

【Sentinel Go】新手指南、流量控制、熔断降级和并发隔离控制

随着微服务的流行&#xff0c;服务和服务之间的稳定性变得越来越重要。Sentinel 是面向分布式、多语言异构化服务架构的流量治理组件&#xff0c;主要以流量为切入点&#xff0c;从流量路由、流量控制、流量整形、熔断降级、系统自适应过载保护、热点流量防护等多个维度来帮助开…...

iOS自定义滚动条

引言 最近一直在做数据通信相关的工作&#xff0c;导致了UI上的一些bug一直没有解决。这两天终于能腾出点时间大概看了一下Redmine上的bug&#xff0c;发现有很多bug都是与系统滚动条有关系的。所以索性就关注一下这个小小的滚动条。 为什么要自定义ScrollIndictor 原有的Scrol…...

C++知识点2:把数据写进switch case结构,和写进json结构,在使用上有什么区别

将数据存储在Switch Case结构和JSON结构中有明显的区别&#xff0c;它们用于不同的目的和方式。以下是它们之间的主要区别&#xff1a; 1、用途和结构&#xff1a; Switch Case结构&#xff1a;Switch Case是一种条件语句&#xff0c;通常用于根据条件执行不同的代码块。它通常…...

肖sir__linux详解__003(vim命令)

linux 文本编辑命令 作用&#xff1a;用于编辑一个文件 用法&#xff1a;vim 文件名称 或者vi &#xff08;1&#xff09;编辑一个存在的文档 例子&#xff1a;编辑一个file1文件 vim aa &#xff08;2&#xff09;编辑一个文件不存在&#xff0c;会先创建文件&#xff0c;再…...

瑞芯微RK3588开发板:虚拟机yolov5模型转化、开发板上python脚本调用npu并部署 全流程

目录 0. 背景1. 模型转化1.1 基础环境1.2 创建python环境1.3 将yolov5s.pt转为yolov5s.onnx1.4 将yolov5s.onnx转为yolov5s.rknn 2. 开发板部署2.1. c版本2.1. python版本&#xff08;必须是python 3.9&#xff09; 3. 性能测试 0. 背景 全面国产化&#xff0c;用瑞芯微rk3588…...

【Redis专题】RedisCluster集群运维与核心原理剖析

目录 课程内容一、Redis集群架构模型二、Redis集群架构搭建&#xff08;单机搭建&#xff09;2.1 在服务器下新建各个节点的配置存放目录2.2 修改配置&#xff08;以redis-8001.conf为例&#xff09; 三、Java代码实战四、Redis集群原理分析4.1 槽位定位算法4.2 跳转重定位4.3 …...

我眼中的《视觉测量技术基础》

为什么会写这篇博客&#xff1a; 首先给大家说几点&#xff1a;看我的自我介绍对于学习这本书没有任何帮助&#xff0c;如果你是为了急切的想找一个视觉测量的解决方案那可以跳过自我介绍往下看或者换一篇博客看看&#xff0c;如果你是刚入门想学习计算机视觉的同学&#xff0…...

【Cisco Packet Tracer】管理方式,命令,接口trunk,VLAN

&#x1f490; &#x1f338; &#x1f337; &#x1f340; &#x1f339; &#x1f33b; &#x1f33a; &#x1f341; &#x1f343; &#x1f342; &#x1f33f; &#x1f344;&#x1f35d; &#x1f35b; &#x1f364; &#x1f4c3;个人主页 &#xff1a;阿然成长日记 …...

深入协议栈了解TCP的三次握手、四次挥手、CLOSE-WAIT、TIME-WAIT。

TCP网络编程的代码网上很多&#xff0c;这里就不再赘述&#xff0c;简单用一个图展示一下tcp网络编程的流程&#xff1a; 1、深入connect、listen、accept系统调用&#xff0c;进一步理解TCP的三次握手 这三个函数都是系统调用&#xff0c;我们可以分为请求连接方和被…...

接口自动化测试系列-yml管理测试用例

项目源码 目录结构及项目介绍 整体目录结构&#xff0c;目录说明参考 测试用例结构类似httprunner写法&#xff0c;可参考demo 主要核心函数 用例读取转换json import yaml import main import os def yaml_r():curpath f{main.BASE_DIR}/quality_management_logic/ops_ne…...

开源对象存储系统minio部署配置与SpringBoot客户端整合访问

文章目录 1、MinIO安装部署1.1 下载 2、管理工具2.1、图形管理工具2.2、命令管理工具2.3、Java SDK管理工具 3、MinIO Server配置参数3.1、启动参数&#xff1a;3.2、环境变量3.3、Root验证参数 4、MinIO Client可用命令 官方介绍&#xff1a; MinIO 提供高性能、与S3 兼容的对…...

Matlab之数组字符串函数汇总

一、前言 在MATLAB中&#xff0c;数组字符串是指由字符组成的一维数组。字符串可以包含字母、数字、标点符号和空格等字符。MATLAB提供了一些函数和操作符来创建、访问和操作字符串数组。 二、字符串数组具体怎么使用&#xff1f; 1、使用单引号或双引号括起来的字符序列 例…...

基于深度学习网络的火灾检测算法matlab仿真

目录 1.算法运行效果图预览 2.算法运行软件版本 3.部分核心程序 4.算法理论概述 5.算法完整程序工程 1.算法运行效果图预览 2.算法运行软件版本 matlab2022a 3.部分核心程序 ................................................................................ load F…...

【Linux】高级IO和多路转接 | select/poll/epoll

多路转接和高级IO 咳咳&#xff0c;写的时候出了点问题&#xff0c;标点符号全乱了&#xff08;批量替换了几次&#xff09;&#xff0c;干脆就把全文的逗号和句号都改成英文的了&#xff08;不然代码块里面的代码都是中文标点就跑不动了&#xff09; 1.高级IO 1.1 五种IO模型…...

el-select 支持多选 搜索远程数据 组件抽取

el-select 支持多选 搜索远程数据 组件抽取 使用方式 import selectView from ./components/selectView<el-form><el-form-item label"选择器"><selectView v-model"selValue" change"handleChange"></el-form-item> …...

el-table纵向垂直表头

参考&#xff1a;https://www.jianshu.com/p/1f38eaffd070 <el-tablestyle"width: 100%":data"getValues":show-header"false"border:cell-style"cellStyle" ><el-table-columnv-for"(item, index) in getHeaders"…...

Pinyin4j介绍和简单使用

前言 Pinyin4j是一个Java库&#xff0c;用于将汉字转换为拼音。它是由中国清华大学的Tsinghua University和中国科学院计算技术研究所的研究人员开发的。Pinyin4j可以用于Java应用程序中&#xff0c;以便在需要时将汉字转换为拼音。例如&#xff0c;它可以用于中文输入法、文本…...

HTML 语义化

目录 HTML 语义化HTML5 新特性HTML 语义化的好处语义化标签的使用场景最佳实践 HTML 语义化 HTML5 新特性 标准答案&#xff1a; 语义化标签&#xff1a; <header>&#xff1a;页头<nav>&#xff1a;导航<main>&#xff1a;主要内容<article>&#x…...

【Oracle】分区表

个人主页&#xff1a;Guiat 归属专栏&#xff1a;Oracle 文章目录 1. 分区表基础概述1.1 分区表的概念与优势1.2 分区类型概览1.3 分区表的工作原理 2. 范围分区 (RANGE Partitioning)2.1 基础范围分区2.1.1 按日期范围分区2.1.2 按数值范围分区 2.2 间隔分区 (INTERVAL Partit…...

今日学习:Spring线程池|并发修改异常|链路丢失|登录续期|VIP过期策略|数值类缓存

文章目录 优雅版线程池ThreadPoolTaskExecutor和ThreadPoolTaskExecutor的装饰器并发修改异常并发修改异常简介实现机制设计原因及意义 使用线程池造成的链路丢失问题线程池导致的链路丢失问题发生原因 常见解决方法更好的解决方法设计精妙之处 登录续期登录续期常见实现方式特…...

鸿蒙DevEco Studio HarmonyOS 5跑酷小游戏实现指南

1. 项目概述 本跑酷小游戏基于鸿蒙HarmonyOS 5开发&#xff0c;使用DevEco Studio作为开发工具&#xff0c;采用Java语言实现&#xff0c;包含角色控制、障碍物生成和分数计算系统。 2. 项目结构 /src/main/java/com/example/runner/├── MainAbilitySlice.java // 主界…...

MySQL账号权限管理指南:安全创建账户与精细授权技巧

在MySQL数据库管理中&#xff0c;合理创建用户账号并分配精确权限是保障数据安全的核心环节。直接使用root账号进行所有操作不仅危险且难以审计操作行为。今天我们来全面解析MySQL账号创建与权限分配的专业方法。 一、为何需要创建独立账号&#xff1f; 最小权限原则&#xf…...

IP如何挑?2025年海外专线IP如何购买?

你花了时间和预算买了IP&#xff0c;结果IP质量不佳&#xff0c;项目效率低下不说&#xff0c;还可能带来莫名的网络问题&#xff0c;是不是太闹心了&#xff1f;尤其是在面对海外专线IP时&#xff0c;到底怎么才能买到适合自己的呢&#xff1f;所以&#xff0c;挑IP绝对是个技…...

深入浅出深度学习基础:从感知机到全连接神经网络的核心原理与应用

文章目录 前言一、感知机 (Perceptron)1.1 基础介绍1.1.1 感知机是什么&#xff1f;1.1.2 感知机的工作原理 1.2 感知机的简单应用&#xff1a;基本逻辑门1.2.1 逻辑与 (Logic AND)1.2.2 逻辑或 (Logic OR)1.2.3 逻辑与非 (Logic NAND) 1.3 感知机的实现1.3.1 简单实现 (基于阈…...

push [特殊字符] present

push &#x1f19a; present 前言present和dismiss特点代码演示 push和pop特点代码演示 前言 在 iOS 开发中&#xff0c;push 和 present 是两种不同的视图控制器切换方式&#xff0c;它们有着显著的区别。 present和dismiss 特点 在当前控制器上方新建视图层级需要手动调用…...

jdbc查询mysql数据库时,出现id顺序错误的情况

我在repository中的查询语句如下所示&#xff0c;即传入一个List<intager>的数据&#xff0c;返回这些id的问题列表。但是由于数据库查询时ID列表的顺序与预期不一致&#xff0c;会导致返回的id是从小到大排列的&#xff0c;但我不希望这样。 Query("SELECT NEW com…...

AxureRP-Pro-Beta-Setup_114413.exe (6.0.0.2887)

Name&#xff1a;3ddown Serial&#xff1a;FiCGEezgdGoYILo8U/2MFyCWj0jZoJc/sziRRj2/ENvtEq7w1RH97k5MWctqVHA 注册用户名&#xff1a;Axure 序列号&#xff1a;8t3Yk/zu4cX601/seX6wBZgYRVj/lkC2PICCdO4sFKCCLx8mcCnccoylVb40lP...