变量
系统变量
全局变量:服务器重启,全局变量都会恢复默认值,如果想要永久生效,需修改配置文件
会话变量:只对当前session 有效,如使用navicat, 新建一个查询页就是一个新的会话
SHOW GLOBAL VARIABLES;
SHOW SESSION VARIABLES;
SHOW GLOBAL VARIABLES LIKE '%char%' ;
SHOW SESSION VARIABLES LIKE '%char%' ;
SELECT @@global. 系统变量名;
SELECT @@session. 系统变量名;
SET GLOBAL 系统变量名 = '值' ;
SET SESSION 系统变量名 = '值' ;
自定义变量
用户变量
SET @用户变量名= 值
SET @用户变量名:= 值
SELECT @用户变量名:= 值
SET @用户变量名= 值
SET @用户变量名:= 值
SELECT @用户变量名:= 值
SELECT 字段 INTO @用户变量名 FROM 表
局部变量:只在begin end 中有效,并且只能放在第一句话
DECLARE 变量明 类型
SET @用户变量名= 值
SET @用户变量名:= 值
SELECT @用户变量名:= 值
SELECT 字段 INTO @用户变量名 FROM 表
set @m = 1 ;
set @n = 2 ;
SET @sum = @n + @m ;
SELECT @sum ;
存储过程
DELIMITER 结束符
CREATE PROCEDURE 存储过程名( 参数列表)
BEGIN
SQL 语句
END 结束符
IN : 入参
OUT : 出参
INOUT :即可做入参, 也可做出参
IN num INT ( 11 )
call 存储过程名( 参数) 结束符
用例
DELIMITER $
CREATE PROCEDURE login( IN username VARCHAR ( 20 ) , IN password VARCHAR ( 20 ) )
BEGIN
DECLARE result INT DEFAULT 0 ;
SELECT COUNT ( 1 ) INTO result
FROM ` user `
WHERE ` user ` . username = username
AND ` user ` . password = password;
SELECT IF ( result > 0 , '成功' , '账号或密码错误' ) ;
END $
CALL login( 'admin' , '123' ) $;
DELIMITER $
CREATE PROCEDURE findRole( IN userId VARCHAR ( 20 ) , OUT roleName VARCHAR ( 20 ) , OUT createId VARCHAR ( 20 ) )
BEGIN
SELECT ` role` . roleName, role. create_id INTO roleName, createId
FROM ` user `
LEFT JOIN role ON ` user ` . user_id = role. user_id
WHERE ` user ` . user_id = userId;
END $
CALL findRole( '1' , @roleName , @createId ) $
SELECT @roleName , @createId $
DELIMITER $
CREATE PROCEDURE doubleNum( INOUT a INT , INOUT b INT )
BEGIN
SET a = a * 2 ;
SET b = b * 2 ;
END $
SET @m = 10 $;
SET @n = 20 @@;
CALL doubleNum( @m , @n ) $;
SELECT @m , @n$ ;
DROP PROCEDURE 存储过程名;
SHOW CREATE PROCEDURE 存储过程名;