数据库的几个问题存储过程触发器函数创建以及sql优化

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优化这篇文章介绍了很多

点击打开链接

猜你喜欢

转载自blog.csdn.net/caokangnsd/article/details/79580479