四、视图和存储过程
视图
存储过程
基本语法
创建
CREATE PROCEDURE ([参数列表])
BEGIN
--SQL
END;
调用
CALL 存储过程名([参数列表])
查看
--查看指定数据库的存储过程及状态信息
SELECT * FROM INFORMATION_SCHEMA.ROUTINES WHERE ROUTINE_SHCEMA='xxxx' ;
--查询某个存储过程的定义
SHOW CREATE PROCEDURE 存储过程名;
删除
DROP PROCEDURE [ IF EXISTS ] 存储过程名
注意:在命令行中,执行创建存储过程的sql时,需要通过关键字delimiter指定sql语句的结束符
变量
系统变量
系统变量是mysql服务器提供的,不是用户自定义的,属于服务器层面,分为全局变量(GLOBAL)、会话变量(SESSION)
查看系统变量
--查看全部系统变量
SHOW [GLOBAL|SESSION] VARIABLES;
--模糊匹配某个系统变量
SHOW [GLOBAL|SESSION] VARIABLES LIKE 'AUTO%'
--查看指定变量的值
SELECT @@[GLOBAL|SESSION].系统变量名
设置系统变量
SET [GLOBAL|SESSION] 系统变量名=值;
SET @@[GLOBAL|SESSION].系统变量名=值;
注意:
如果没有指定global|session,默认是session,会话变量。
mysql服务重新启动之后,所设置的全局变量会失效,要想不失效,可以在/etc/my.cnf中配置。
用户自定义变量
用户自定义变量是用户根据需求自己定义的变量,用户变量不用提前声明,在用的时候,直接使用@变量名使用就可以。其作用域为当前连接。
赋值
SET @var_name=exp[,@var_name=exp]……;
SET @var_name:=exp[,@var_name:=exp]……;
SELECT @var_name:=exp[,@var_name:=exp]……;
SELECT 字段名 INTO @var_name FROM 表名;
使用
SELECT @var_name;
注意:
用户自定义变量无需对其进行声明或初始化,只不过获取到的值为NULL。
局部变量
if
例子:
参数(IN OUT INOUT)
case
循环-while
循环-repeat
循环-loop
游标
执行会报错,但是数据能够正常插入目标表中。原因是使用while true死循环,导致游标到达最后一个记录后,再循环找不到记录。可以使用条件处理程序来解决这种报错。解决办法参照下一节条件处理程序。