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;
posted @   Solitary-Rhyme  阅读(43)  评论(0编辑  收藏  举报
编辑推荐:
· 基于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)
点击右上角即可分享
微信分享提示