变量
全局变量( 内置变量) :可以在多个会话中去访问他
show variables
select @@变量名
set 变量名= 新值
SET @@character_set_client = utf8; 设置数据库编码
set @@character_set_results = utf8;
SELECT @@character_set_client ;
会话变量:
只存在于当前客户端与数据库服务器端的一次连接当中
如果连接断开 那么会话变量全部丢失
set @变量= 值
select @变量
局部变量:
在存储过程中使用的变量就叫局部变量
只要存储过程执行完毕 局部变量就丢失
DECLARE i INT DEFAULT 1 ;
set i= 10 ;
定义一个变量,作为一个临时展示的字段
SELECT ( @i := @i + 1 ) AS id, ename, job, sal
FROM emp, ( SELECT @i := 0 ) AS init;
说明: SELECT @i := 0 意思
它的意思是为变量@i 赋值( 如:set @i = 0 ; )
在mysql中用户变量赋值有两种方式 一种是= 另一种是:=
其中区别在于使用set 赋值时两种方式都可以使用
使用select 赋值时只能使用:=
存储过程
概念
存储过程是数据库中的一个对象
存储在服务端 用来封装多条SQL语句且带有逻辑性 可以实现一个功能
由于他在创建时 就已经对SQL进行了编译 所以执行效率高
而且可以重复调用 类似与我们Java中的方法
语法
DELIMITER $$
CREATE
PROCEDURE ` 数据库名` . ` 存储过程名` ( )
BEGIN
END $$
DELIMITER ;
注意:
创建存储过程需要管理员分配权限
补充:
delimiter 是mysql定义结束标记的
在mysql客户端中结束标记默认是分号;
如果一次输入的语句较多 并且语句中间有分号
这时需要新指定一个特殊的结束符
delimiter $$ 表示mysql用$$表示mysql语句结束
过程结束后肯定会有一句delimiter
表示恢复成默认的
参数
in :输入参数
out :输出参数
inout :输入输出参数
DELIMITER $$
CREATE PROCEDURE ` security` . ` test2` ( IN num INT , OUT res INT )
BEGIN
SELECT * FROM sys_role WHERE id = num;
SELECT COUNT ( * ) FROM sys_role INTO res;
END $$
DELIMITER ;
CALL ` security` . ` test2` ( 1 , @res ) ;
SELECT @res ;
调用存储过程 call
语法: CALL ` security` . ` test2` ( 1 , @res ) ;
查询结果: SELECT @res ;
删除存储过程 drop
语法: DROP PROCEDURE test1;
查看存储过程 show
SHOW PROCEDURE STATUS ;
SHOW CREATE PROCEDURE 存储过程名;
判断的存储过程 if
DELIMITER $$
CREATE PROCEDURE week_procedure( IN num INT , OUT str VARCHAR ( 32 ) )
BEGIN
IF num= 1 THEN
SET str= '星期一' ;
ELSEIF num= 2 THEN
SET str= '星期二' ;
ELSE
SET str= '输入有误' ;
END IF ;
END $$
DELIMITER ;
CALL week_procedure( 1 , @str ) ;
SELECT @str ;
循环的存储过程 while do
DELIMITER $$
CREATE
PROCEDURE ` security`