💎一站式轻松地调用各大LLM模型接口,支持GPT4、智谱、星火、月之暗面及文生图 广告
[toc] # 一、系统变量 系统变量分为全局变量(<b>global</b>)和会话变量(<b>session</b>) 说明:变量由系统定义,不是用户定义,属于服务器层面 注意:全局变量要加global关键字,若不写默认是会话级别 ~~~ //1.全局变量 show global variables; //查看所有全局变量 show global variables like "%char"; //查看满足条件的部分全局变量 select @@global.autocommit; //查看指定的系统变量的值 set @@global.autocommit=0; //为变量赋值 //2.会话变量 show session variables; //查看所有会话变量,其他同上,就不一一赘述 ~~~ # 二、自定义变量 自定义变量分为用户变量和局部变量 说明:变量由用户自定义,要求用户声明、赋值,然后才能使用 ## 1.用户变量 ~~~ 赋值操作符:=或:= ①声明并初始化 SET @变量名=值; SET @变量名:=值; SELECT @变量名:=值; ②赋值(更新变量的值) 方式一: SET @变量名=值; SET @变量名:=值; SELECT @变量名:=值; 方式二: SELECT 字段 INTO @变量名 FROM 表; ③使用(查看变量的值) SELECT @变量名; ~~~ ## 2.局部变量 ~~~ /* 作用域:仅仅在定义它的begin end块中有效 应用在 begin end中的第一句话 */ ①声明 DECLARE 变量名 类型; DECLARE 变量名 类型 【DEFAULT 值】; ②赋值(更新变量的值) 方式一: SET 局部变量名=值; SET 局部变量名:=值; SELECT 局部变量名:=值; 方式二: SELECT 字段 INTO 具备变量名 FROM 表; ③使用(查看变量的值) SELECT 局部变量名; ~~~ 关键点:用户变量和局部变量主要差别在<b>声明</b>部分,用户变量声明用set,局部变量使用declare # 三、存储过程 含义:一组预先编译好的SQL语句的集合,理解成批处理语句 1、提高代码的重用性 2、简化操作 3、减少了编译次数并且减少了和数据库服务器的连接次数,提高了效率 ## 1.创建语法 ~~~ CREATE PROCEDURE 存储过程名(参数列表) BEGIN 存储过程体(一组合法的SQL语句) END /* 注意: 1、参数列表包含三部分 参数模式 参数名 参数类型 举例: in stuname varchar(20) 参数模式: in:该参数可以作为输入,也就是该参数需要调用方传入值 out:该参数可以作为输出,也就是该参数可以作为返回值 inout:该参数既可以作为输入又可以作为输出,也就是该参数既需要传入值,又可以返回值 2、如果存储过程体仅仅只有一句话,begin end可以省略 存储过程体中的每条sql语句的结尾要求必须加分号。 存储过程的结尾可以使用 delimiter 重新设置 语法: delimiter 结束标记 案例: delimiter $ */ ~~~ ## 2.调用语法 ~~~ call 存储过程名(实参列表); ~~~ 案例演示: ~~~ 案例1:创建存储过程实现 根据女神名,查询对应的男神信息 CREATE PROCEDURE myp2(IN beautyName VARCHAR(20)) BEGIN SELECT bo.* FROM boys bo RIGHT JOIN beauty b ON bo.id = b.boyfriend_id WHERE b.name=beautyName; END; 调用 CALL myp2('柳岩'); ~~~ # 四、函数 含义:一组预先编译好的SQL语句的集合,理解成批处理语句 1、提高代码的重用性 2、简化操作 3、减少了编译次数并且减少了和数据库服务器的连接次数,提高了效率 区别: 存储过程:可以有0个返回,也可以有多个返回,适合做批量插入、批量更新 函数:有且仅有1 个返回,适合做处理数据后返回一个结果 ## 1.创建语法 ~~~ CREATE FUNCTION 函数名(参数列表) RETURNS 返回类型 BEGIN 函数体 END /* 注意: 1.参数列表 包含两部分: 参数名 参数类型 2.函数体:肯定会有return语句,如果没有会报错 如果return语句没有放在函数体的最后也不报错,但不建议 return 值; 3.函数体中仅有一句话,则可以省略begin end 4.使用 delimiter语句设置结束标记 */ ~~~ ## 2.调用语法 ~~~ SELECT 函数名(参数列表) ~~~ 案例演示 ~~~ 1.无参有返回 案例:返回公司的员工个数 CREATE FUNCTION myf1() RETURNS INT BEGIN DECLARE c INT DEFAULT 0;#定义局部变量 SELECT COUNT(*) INTO c#赋值 FROM employees; RETURN c; END ; SELECT myf1(); 2.有参有返回 案例1:根据员工名,返回它的工资 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 ; SELECT myf2('k_ing') ; ~~~