-- 变量
-- 查看系统全局变量
show GLOBAL variables;
show GLOBAL variables like '%char%';
-- 查看系统会话变量
show SESSION variables;
show SESSION variables like '%char%';
-- 查看指定的变量
SELECT @@global.autocommit;
SELECT @@session.tx_isolation;
-- 设置变量
set @@global.tx_isolation ='read-COMMITTED';
set @@session.tx_isolation ='read-COMMITTED';
-- 设置用户变量,用一个@设置(作用域在本次连接中,类似于系统变量中的会话变量)
-- 方式一:可以用 = 也可以用:=
set @name :='棋棋';
set @name :=03;
-- 方式二:通过select into来赋值,将count(*)的结果赋值给变量name
SELECT count(*) into @name from l;
SELECT @name;
-- 设置局部变量(作用域旨在begin end中)
-- 声明:
-- declare 变量名 类型;(但是这一种实践失败了,会报错)
-- declare 变量名 类型 default 值;
declare bb int DEFAULT 100;
SELECT @bb;
-- 赋值:跟用户变量一样,一般不用加@符号,需要限定类型。
set @bb =120;
-- 变量运算
set @a =1;
set @b =5;
set @c =@a+@b;
SELECT @c;
-- 存储过程
-- 创建,如果begin end里面只有一句话,那么begin end可以省略
-- 存储过程里面的每一条sql语句结尾都要加;如果是存储过程的结尾则加上自己定义的标识符,标识符定义方式为:delimiter 标识符
delimiter $
-- create procedure Myprocedure(参数列表)
-- BEGIN
-- 一组sql语句
-- end
-- 参数包含三部分,参数模式,参数名,参数类型
-- 参数模式是in ,out ,inout
-- in指参数需要外部传入值,out指参数可以作为返回,inout指参数既要传入,又可以传出
-- 存储过程调用语法
-- call 存储过程名(实参列表)
delimiter $
create procedure myprocedure()
begin
SELECT * from l;
end;
CALL myprocedure();
-- 存储过程初尝试
create procedure myprocedure3(in a int)
BEGIN
DECLARE result int DEFAULT 0;
SELECT COUNT(*) into result from
l where l.id =a;
SELECT IF(result >0,'成功','失败') as '结果';
end;
CALL myprocedure3(5);
CREATE procedure myprocedure4(in a int,out result varchar(10))
BEGIN
SELECT COUNT(*) into result from l where l.id =a ;
END;
set @result ='';
call myprocedure4(10,@result);
SELECT @result;
create procedure myprocedure5(inout a int,inout b int)
BEGIN
set a =a*2;
set b =b*2;
END
set @a =10;
set @b =630;
call myprocedure5(@a,@b);
SELECT @a,@b;
CREATE procedure myprocedure6(in mydate TIMESTAMP ,out result varchar(10))
begin
SELECT DATE_FORMAT(mydate,'%y年%m月%d日') into result;
end
CALL myprocedure6(NOW(),@str);
SELECT @str;
-- 查看存储过程信息
show create procedure myprocedure5;
sql -变量与存储过程
最新推荐文章于 2024-10-06 06:56:01 发布