Mysql变量和储存过程及方法

系统全局变量@@

系统会话变量

自定义会话变量@

自定义函数变量

##系统变量 (两个@@,系统全局变量;一个@,用户会话变量;没有@,系统会话变量)
show GLOBAL VARIABLES  like '%commit%';
show session 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;

##方法变量(在方法中没有@,为局部变量)
drop PROCEDURE if EXISTS f01;
delimiter $
create PROCEDURE f01(in m int,out n int, inout `name` varchar(9)) 
BEGIN 
declare a int DEFAULT 3;
declare b int DEFAULT 6;
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();
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值