mysql
1,用户变量,局部变量
数据库也有变量,就像一些编程语言一样,我们可以直接声明变量并且赋值,对于全局和会话变量不作讨论
set @mynumber=1;随意设置一个变量仅存在与该使用用户内 select @mynumber:=3 from dual;选择时可以:=改变数值
局部变量创建在如函数的begin-end之内
DECLARE c varchar(100) DEFAULT 'a';
2,创建函数
delimiter $本来所有语句的结尾是;这里改成$否则在函数的内部;会被误认为语句结束,结束后再改回;
drop function if exists concat1; delimiter $ create function concat1(a VARCHAR(20),b varchar(20)) returns varchar(200) BEGIN DECLARE c varchar(100) DEFAULT 'a'; set c=CONCAT(a,b); return c; END $ delimiter ; set @a='A'; set @b='B'; select concat1(@a,@b) from dual;
至于函数的内容可以自己更改
3,创建存储过程
drop PROCEDURE if exists proc1; delimiter $ create PROCEDURE proc1(in a varchar(50)) BEGIN select * from test where id=a; end $ delimiter ; set @a='f67f405b-53ef-40ee-bfde-60e9871e6471'; call proc1(@a);
drop PROCEDURE if exists proc2; delimiter $ create PROCEDURE proc2(out a varchar(50)) BEGIN set a='o'; select * from test where id=a; end $ delimiter ; set @a='f67f405b-53ef-40ee-bfde-60e9871e6471'; call proc2(@a);
上面有一个in和out的区别,in表示可以外部更改参数传入,而外部的参数对于out来说没有作用,当然你也可以将其设置为INOUT
条件语句if then else end if;
扫描二维码关注公众号,回复:
1662441 查看本文章
delimiter $ create PROCEDURE proc3(inout a int) BEGIN if a=0 then select 0; ELSE select 1; end if; end $ delimiter ; set @a=0; call proc3(@a);
case when then else end case;
delimiter $ create PROCEDURE proc4(inout a int) BEGIN CASE when a=0 then select 0; ELSE select 1; end case; end $ delimiter ; set @a=0; call proc4(@a);
循环只介绍一个while do end while;
CREATE PROCEDURE proc5() begin declare var int; set var=0; while var<6 do insert into test values(var); set var=var+1; end while; end;
4,触发器
delimiter $ create TRIGGER trigger_user after update on `user` for each ROW BEGIN update user set username='o'; end $ delimiter ;
除了固定的写法外,before,after
insert,delete,update可以自行更改
通过简单的介绍,再去学习更深的可能会方便一点
5,sql优化
对于sql优化这篇文章介绍了很多