(1)什么是存储过程和函数:
存储过程和函数:事先经过编译并存储在数据库中的一段sql语句的集合。
使用好处:
1、简化应用开发人员的很多工作
2、减少数据在数据库和应用服务器之间的传输
3、提高了数据处理的效率
(2)创建存储过程
创建存储过程:
create procedure 存储过程名 ([proc_parameter[,…]])
[characteristic…]routine_body
###创建存储过程
语法: in(输入 需要传参数) out(输出 返回值) inout(输入输出)
create procedure 存储过程名(in|out|inout 参数名 参数类型,...)
begin
存储过程体
End
create procedure 存储过程名(参数模式 参数名 参数类型)
begin
存储过程体
end
注意:
1.参数模式:in、out、inout,其中in可以省略
2.存储过程体的每一条sql语句都需要用分号结尾
二、调用
call 存储过程名(实参列表)
举例:
调用in模式的参数:call sp1(‘值’);
调用out模式的参数:set @name; call sp1(@name);select @name;
调用inout模式的参数:set @name=值; call sp1(@name); select @name;
三:示例 使用无参进行创建调用 #删除 DROP PROCEDURE myp1; #声明 注意在命令行里面进行调用,直接调用用报错 DELIMITER $ CREATE PROCEDURE myp1() BEGIN INSERT INTO admin(username,`password`) VALUES('Lim','1001'), ('ZhangHao','1001'); END $ #调用 CALL myp1()$; 字符集有问题。 # in 类型参数的调用 CREATE PROCEDURE myp2( IN girlname VARCHAR(20) ) BEGIN SELECT bo.* FROM boys bo RIGHT JOIN beauty b ON bo.id = b.boyfriend_id WHERE b.name = girlname; END $ #调用 CALL myp2('小昭')$ DELIMITER $ //声明结束符的位置代表命令的结束行 $代表结束行 CREATE PROCEDURE myp4( IN username VARCHAR(20) , IN pass VARCHAR(20) ) BEGIN DECLARE rt INT DEFAULT 0; SELECT COUNT(*) INTO rt FROM admin WHERE admin.username = username AND admin.password = pass; SELECT IF( rt >0,'成功','失败'); END $ CALL myp4('lisi','1001')$ #声明; CREATE PROCEDURE myp5( IN username VARCHAR(20) , OUT boyname VARCHAR(20)) BEGIN SELECT bo.boyName INTO boyname FROM boys bo INNER JOIN beauty be ON bo.id = be.boyfriend_id WHERE be.name = username; END $ #调用 CALL myp5('小昭',@boyname)$ SELECT @boyname$;
(3)系统变量
作用域:针对于所有会话(连接)有效,但不能跨重启
查看所有全局变量
SHOW GLOBAL VARIABLES;
查看满足条件的部分系统变量
SHOW GLOBAL VARIABLES LIKE '%char%';
查看指定的系统变量的值
SELECT @@global.autocommit;
为某个系统变量赋值
SET @@global.autocommit=0;
SET GLOBAL autocommit=0;
(4)会话变量
作用域:针对于当前会话(连接)有效
查看所有会话变量
SHOW SESSION VARIABLES;
查看满足条件的部分会话变量
SHOW SESSION VARIABLES LIKE '%char%';
查看指定的会话变量的值
SELECT @@autocommit;
SELECT @@session.tx_isolation;
为某个会话变量赋值
SET @@session.tx_isolation='read-uncommitted';
SET SESSION tx_isolation='read-committed';
(5)用户变量
声明并初始化:
SET @变量名=值;
SET @变量名:=值;
SELECT @变量名:=值;
示例:SQL 声明变量
DECLARE NAME VARCHAR(20) DEFAULT '';
SET @name='li si';
SELECT @NAME;
赋值:
方式一:一般用于赋简单的值
SET 变量名=值;
SET 变量名:=值;
SELECT 变量名:=值;
方式二:一般用于赋表 中的字段值
SELECT 字段名或表达式 INTO 变量
FROM 表;
使用:
select @变量名;
(6)局部变量
声明:
declare 变量名 类型 【default 值】;
赋值:
方式一:一般用于赋简单的值
SET 变量名=值;
SET 变量名:=值;
SELECT 变量名:=值;
方式二:一般用于赋表 中的字段值
SELECT 字段名或表达式 INTO 变量 FROM 表;
使用:
select 变量名
二者的区别:
作用域 定义位置 语法
用户变量 当前会话 会话的任何地方 加@符号,不用指定类型
局部变量 定义它的BEGIN END中 BEGIN END的第一句话 一般不用加@,需要指定类型。
(1)创建使用函数
###创建函数
学过的函数:LENGTH、SUBSTR、CONCAT等
语法:
CREATE FUNCTION 函数名(参数名 参数类型,...) RETURNS 返回类型
BEGIN
函数体
END
###调用函数
SELECT 函数名(实参列表)
###函数和存储过程的区别
函数 :FUNCTION SELECT 函数() 只能是一个 一般用于查询结果为一个值并返回时,当有返回值而且仅仅一个
存储过程: PROCEDURE CALL 存储过程() 可以有0个或多个 一般用于更新;
###示例 查询员工总个数 CREATE FUNCTION myf1() RETURNS INT BEGIN DECLARE c INT DEFAULT 0; --声明 SELECT COUNT(*) INTO c FROM employees; RETURN c; --返回 END $ SELECT myf1()$ CREATE FUNCTION myf2( E_Name VARCHAR(20) ) RETURNS DOUBLE BEGIN DECLARE sal DOUBLE DEFAULT 0; SET @sal=0; SELECT salary INTO sal FROM employees WHERE first_name = E_Name; RETURN sal; END $ DESC employees SELECT myf2('Steven')$ ###调用函数 SELECT 函数名(实参列表) ##查看函数定义 show create function ##删除 drop function ...