您的位置:首页 > 数据库

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

2018-03-16 14:24 861 查看
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;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优化这篇文章介绍了很多
点击打开链接
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐