##系统变量 (两个@@,系统全局变量;一个@,用户会话变量;没有@,系统会话变量)showGLOBAL VARIABLES like'%commit%';showsession VARIABLES like'%COMMIT%';set @@GLOBAL.autocommit=0;#修改全局变量,对所有新会话有效,重启失效。#set @autocommit=0; #修改会话变量,对任何人无效,是一个错误的方法。这个只是用户自定义变量。set autocommit=0;#修改会话变量,仅对当前会话有效。##会话变量(一个@,用户会话变量)set@m=1;set@n=2;set@sum=@m+@n;SELECT@sum;##方法变量(在方法中没有@,为局部变量)dropPROCEDUREifEXISTS f01;delimiter $
createPROCEDURE f01(in m int,out n int,inout`name`varchar(9))BEGINdeclare a intDEFAULT3;declare b intDEFAULT6;declare c int;set c=a+b;set n=c*m;select'wangwei'into name;END $
call f01(10,@nn,@na);select@a,@b,@m,@nn,@na;#注明前三个变量结果为Null。
存储过程和方法
##创建 存储过程
drop PROCEDURE if EXISTS p01;
delimiter //
create procedure p01(in i char(3),out o int)
begin
select count(*) into o from t1
where id2=i;
end //
##调用 存储过程
call p01(121,@o);select @o;##创建 函数
create function hello(s char(20))
returns char(50) DETERMINISTIC
RETURN CONCAT('Hello, ',s,'!');#合并字符串##调用 函数select hello('wangwei');
存储过程安全机制
##指定 用户@主机 去执行语句体
drop PROCEDURE if EXISTS p02;
create DEFINER ='root'@'localhost' PROCEDURE p02()select'Number of t1:',count(*) from t1;
CALL p02();##指定 用户@主机 去执行语句体,同时校验调用者是否有查询权限
drop PROCEDURE if EXISTS p03;
create DEFINER ='admin'@'localhost' PROCEDURE p03() SQL SECURITY INVOKER
select'Number of t1:',count(*) from t1;
CALL p03();
系统全局变量@@系统会话变量自定义会话变量@自定义函数变量##系统变量 (两个@@,系统全局变量;一个@,用户会话变量;没有@,系统会话变量)show GLOBAL VARIABLES like '%commit%';show session VARIABLES like '%COMMIT%';set @@GLOBAL.autocommit=0; #修改全局变量,对所有新会话有效,重启失效。#set @autocommit=0; #修改会话变量,对任何人无效,是一个错误的方法。这