MySQL基础笔记(7) - 函数&其它杂项
函数&本地化
1. 函数
1.1 基本函数
定义:与存储过程类似,函数是一组预先编译好的SQL语句的集合,可以理解成批处理语句。但是存储过程可以有0个或多个返回,适合做批量插入,批量更新。函数有且仅有1个返回,适合做处理数据后返回一个结果。
语法:CREATE FUNCTION [函数名]([参数名] [参数类型]) RETURNS [返回类型] BEGIN [函数体] END [结束标记]
#1.创建函数
DELIMITER $
CREATE FUNCTION myf2(empName VARCHAR(20)) RETURNS DOUBLE
BEGIN
SET @sal=0;#定义用户变量
SELECT salary INTO @sal #赋值
FROM employees
WHERE last_name = empName;
RETURN @sal;
END $
#函数体中必须要有return语句
#若函数体中仅有一句话,则可以省略begin end
#2.调用语法
#SELECT 函数名(参数名 参数类型)
SELECT myf2('k_ing');
1.2 流程控制函数
1.2.1 分支函数
-
case结构:case结构的使用和java中的多重if和switch类似,但是在sql中,case结构有两种使用方法:一是作为独立的语句出现,二是作为表达式出现,两者在书写格式上略有不同
#1.作为独立语句出现(必须要在Begin end中) BEGIN case [表达式] when [值1/条件1] then [语句1]; when [值2/条件2] then [语句2]; [...] else [语句n]; end case; END #2.作为表达式出现(可以在任何地方) BEGIN case [表达式] when [值1] then [值1]; when [值2] then [值2]; [...] else [值n]; end; END
-
if结构:类似于java中的if-else结构,实现多重分支
BEGIN if [条件1] then [语句1]; elseif [条件2] then [语句2]; [...] else [语句n]; end if; END
1.2.2 循环函数
-
while结构
#1.基本while结构 #批量插入,根据次数插入到admin表中多条记录 DELIMITER $ CREATE PROCEDURE pro_while1(IN insertCount INT) BEGIN DECLARE i INT DEFAULT 1; WHILE i<=insertCount DO INSERT INTO admin(username,`password`) VALUES('Rose'+i,'666'); END WHILE; END $ CALL pro_while(100)$ #2.添加leave语句 #批量插入,根据次数插入到admin表中多条记录,如果次数>20则停止 DELIMITER $ CREATE PROCEDURE pro_while1(IN insertCount INT) BEGIN DECLARE i INT DEFAULT 1; a:WHILE i<=insertCount DO INSERT INTO admin(username,`password`) VALUES('Rose'+i,'666'); IF i>=20 THEN LEAVE a; #类似于break语句,达成条件后跳出a标签的while END IF; SET i=i+1; END WHILE a; END $ CALL pro_while(100)$ #除了leave之外,还有iterate语句,使用方法和java中的continue类似
-
loop结构
#2.loop [标签]:loop [循环体]; end loop [标签];
-
repeat结构
#3.repeat [标签]:repeat [循环体]; until [结束循环的条件] end repeat [标签];
2. 本地化和全球化
有时Mysql需要处理不同字符集和语言,以下是一些基础概念:
- 字符集:字母和符号的集合
- 编码:某个字符集成员的内部表示
- 校对:规定字符如何比较的指令
#查看支持的字符集的完整列表
SHOW CHARACTER SET;
#查看支持的校对的完整列表
SHOW COLLATION;
#查看默认的字符集和校对
SHOW VARIABLES LIKE 'character%';
SHOW VARIABLES LIKE 'collation%';
#实例:创建一个表并指定一个字符集和一个校对顺序
CREATE TABLE mytable
(
columnn1 INT,
columnn2 VARCHAR(10)
) DEFAULT CHARACTER SET hebrew
COLLATE hebrew_general_ci;
分类:
MySQL
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)