变量
系统变量
全局变量、会话变量
- 查看系统变量:
- show variables
自定义变量
包括用户变量与局部变量
- 变量是用户定义的,不是由系统定义
- 使用步骤:
- 声明 赋值 使用
用户变量
- 用户变量:
- 针对于当前连接,等同于会话变量的作用域
- 声明并初始化
- set @用户变量名 = 值
- set @用户变量名 :=值
- select !@用户变量名 :=值
- 更新用户变量值
- 方式一:
- set @用户变量名 = 值
- set @用户变量名 :=值
- select !@用户变量名 :=值
- 方式二:
- select字段 into 变量名 from 表
- 方式一:
- 查看用户变量值
- select @用户变量名
局部变量
作用域 :仅仅在定义它的begin end中有效
应用在begin end中的第一句话
- 声明
- declare 变量名 类型·
- declare 变量名 类型 default 值
- 赋值
方式一- set 局部变量名 =值
- set 局部变量名 :=值
- select @局部变量名:=值
方式二: - select 字段 into 局部变量名 from 表
- 使用 :
- select 局部变量名
存储过程
-
含义:一组预先编译好的SQL语句的集合,理解成批处理语句
-
好处:
- 提高代码的重用性
- 简化操作
- 减少了编译次数并且减少了和数据库服务器的连接次数,提高了效率
创建语法
-
create procedure 存储过程名(参数列表) begin 存储过程体(一组合法的SQL语句) end
-
参数列表包括三部分:
参数模式 参数名 参数类型
-
范例:
in stuname varchar(20) 参数模式: IN: 该参数可以作为输入,也就是该参数需要调用传入值 OUT :该参数可以作为输出,也就是该参数可以作为返回值 INOUT :该参数既可以作为输入,也可以作为输出,既需要传入值,又可以返回值
-
存储过程体中仅仅只有一句话时,begin end 可以省略
-
存储过程体中的每条SQL语句的结尾都必须加分号
-
存储过程的结尾可以用DELIMITER重新设置
范例
create procedure test5(in idd int)
begin
select * from tab where id = idd ;
select * from student where id =id ;
end
CREATE PROCEDURE test(in id int)
begin
DECLARE sum int DEFAULT 0;
select count(*) into sum
from ssm where ssm.id=id;
select sum;
end
CREATE PROCEDURE test2(in name varchar(20),out sum int,out onename varchar(20))
begin
select ssm.id,ssm.email into sum,onename
from ssm where ssm.onename =name;
end;
set @num=0;
set @onename =null;
call test2("张三",@num,@onename);
select @num,@onename;
create PROCEDURE test3(inout a int,inout b int)
begin
set a=a*2;
set b=b*2;
END;
set @a=1;
set @b=2;
call test3(@a,@b);
select @a,@b
删除存储过程
-
语法:drop procedure 存储过程名
-
drop PROCEDURE test drop procedure test2
-
不能同时删除多个存储过程
查看存储过程的信息
- show create procedure 存储过程名
show create procedure test3
自定义函数
- 含义:一组预先编译好的SQL语句的集合,理解成批处理语句
函数与存储过程区别
- 存储过程:可以有0个返回,也可以有多个返回,适合做批量插入、批量更新
- 函数:有且仅有一个返回,适合做数据处理后返回一个结果
创建语法
- create function 函数名(参数列表) returns 返回类型
begin
函数体
end - 参数列表包含两部分:参数名 参数类型
- 函数体 :肯定会有return 语句,放在函数体最后
调用语法:
- select 函数名(参数列表)
查看函数
- show create function 函数名
删除函数
- drop function 函数名
范例
-
create FUNCTION num() RETURNS int BEGIN DECLARE c int DEFAULT 0; select count(*) into c from ssm; return c; END select num() create FUNCTION num(id int) RETURNS int BEGIN DECLARE c int DEFAULT 0; select count(*) into c from ssm where ssm.id=id; return c; END; select num(1) show create function num drop function num