文章目录
一、MySQL中的自定义变量
一、用户变量
(1)声明
方式1:
SET @变量名=值;
方式2:
SET @变量名:=值;
(2)赋值
方式一:一般用于赋简单的值
SET 变量名=值;
SET 变量名:=值;
方式二:一般用于赋表 中的字段值
SELECT 字段名或表达式 INTO 变量 FROM 表;
(3)使用方法
select @变量名;
二、局部变量
(1)声明
declare 变量名 类型 【default 值】;
(2)赋值
方式一:一般用于赋简单的值
SET 变量名=值;
SET 变量名:=值;
方式二:一般用于赋表 中的字段值
SELECT 字段名或表达式 INTO 变量 FROM 表;
(3)使用
select 变量名;
三、用户变量和局部变量的区别
作用域 | 定义位置 | 语法 | |
---|---|---|---|
用户变量 | 当前会话 | 会话的任何地方 | 加@符号,不用指定类型 |
局部变量 | 定义它的BEGIN END中 | BEGINEND的第一句话 | 一般不用加@,需要指定类型 |
存储过程和函数类似于java中的方法
好处:提高代码的重用性,简化操作,提高了效率(减少了编译次数并且减少了和数据库连接的次数)
存储过程
含义:一组预先编译好的sql语句的集合,集结成批处理语句
二、存储过程的创建
(1)语法
CREATE PROCEDURE 存储过程名(参数列表)
BEGIN
方法体
END
类似于方法:
修饰符 返回类型 方法名(参数类型 参数名,...){
方法体;
}
(2)参数列表的特点
-
参数列表包含三部分:参数模式,参数名,参数类型
eg:IN name VAECHAR(20) -
参数模式
- IN
该参数可以作为输入,也就是该参数需要调用方传入值。 - OUT
该参数可以作为输入,也就是该参数可以作为返回值。 - INOUT
该参数即可以作为输入又可以作为输出(即该参数既需要传入值,又可以返回值)。
(3)注意事项
- 若存储过程仅仅只有一句话,BEGIN END可以省略存储过程体(方法体)中的每条sql语句的结尾必须加分号。
- 存储过程的结尾可以使用DELIMITER重新设置。例如。
用法:
DELIMITER 新的结束标记
示例:
delimiter $
三、存储过程的与使用
一、存储过程的调用方法
CALL 存储过程名(实参列表);
二、存储过程的使用
空参列表
(1)举例:插入到admin表中3条记录
(2)举例代码
DELIMITER $
CREATE PROCEDURE myp1()
BEGIN
INSERT INTO admin(username,`password`)
VALUES('qwe','111'),('asd','222'),('zxc','333');
END $
CALL myp1()$
带IN模式参数的存储过程
(1)举例:根据女神名,查询对应的男神信息
(2)举例代码
DELIMITER $
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('小昭')$
所遇问题: 若beauty b不用括号括起来。这句话在mysql5下执行会有问题,要把联合的表用括号包含起来才行,否则会报错。
(3)运行结果
带OUT模式参数的存储过程
(1)举例:根据女神名,返回对应的男神名
(2)举例代码
DELIMITER $
CREATE PROCEDURE myp3(IN beautyName VARCHAR(20),OUT boyName VARCHAR(20))
BEGIN
SELECT bo.boyName INTO boyName
FROM boys bo
INNER JOIN (beauty b) ON bo.id = b.boyfriend_id
WHERE b.`name` = beautyName;
END $
CALL myp3('小昭',@bName)$
SELECT @bName$
(3)运行结果
带INOUT模式参数的存储过程
(1)举例:传入a和b两个值,最终a和b都翻倍并返回。
(2)举例代码
DELIMITER $
CREATE PROCEDURE myp4(INOUT a INT,INOUT b INT)
BEGIN
SET a=a*2;
SET b=b*2;
END $
SET @m=10$ //定义变量m
SET @n=20$ //定义变量n
CALL myp4(@m,@n)$
SELECT @m,@n$
(3)运行结果
三、存储过程的删除
(1)语法
DROP PROCEDURE 存储过程名;
注: 每次只能删除一个存储过程。
四、查看存储过程的信息
(1)语法
SHOW CREATE PROCEDURE 存储过程名;
(2)运行结果