mysql中的存储过程

建表

CREATE TABLE if not exists `admin` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `username` varchar(10) NOT NULL,
  `password` varchar(10) NOT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB  CHARSET=utf8;
insert into admin(username,password) values
('php','999'),
('javascript','000'),
('java','444'),
('html','444'),
('python','333');
select * from admin;

mysql中的存储过程

存储过程简单来说就是把几句sql语句放在一起,一起执行

1.要用delimiter把结束标志改掉

因为每行sql语句都要用;结尾,编辑器看到;号就会直接运行,一段存储过程就被拆得七零八落了,所以我们用delimiter把结束标志;改成美元$

delimiter $  要放在第一行

然后存储过程中的sql语句后面还是以;结束,但是不会再自动运行了

整个存储过程以$ 结尾

往后的要运行的语句也要$结尾

举例

mysql中的存储过程

 

无参存储过程

 

#把默认结束标记;改成$
delimiter $
#创建存储过程  mypro()
create procedure mypro()
begin
	insert into admin(username,password) 
	values
	('vb','333'),
	('vc','444');
	delete from admin where id =6;
end $

建好后,在navicat15中显示在函数里面

mysql中的存储过程

上面只是创建了一个存储过程,相当于把几行sql语句存储了起来,但是并没有运行

运行还需要调用一下

call mypro()

这样就运行了,再来查看一下结果,先插入6和7,然后删除6,结果没错

mysql中的存储过程

 

带in参数的存储过程

#创建带in参数的存储过程
delimiter $
create procedure myproin(in name varchar(20))
begin
	delete from admin where username = name;
	select * from admin;
end $

#调用存储过程
call myproin('java') $

在存储过程中存了两句语句

一句是带输入参数的删除语句

一句是查询,调用后直接就显示结果了,省得再查询,而且存储过程里只放一句sql也不像样,加一句凑数

调用时传入参数'java',运行后成功删除第3行的java

mysql中的存储过程

再建一个带两个in参数的存储过程

两个参数就可以代替用户名和密码了

delimiter $
create procedure myproin3(in name varchar(20),in psw varchar(20))
begin
    #定义一个局部变量
	declare result int default 0;
    #把查询到的数值赋值给局部变量
	select count(*) into result from admin where username=name and password=psw;
    #什么都有,不知道还要java干嘛
	select IF(result>0,'登陆成功','登陆失败');
end $

测试一下,先输入一个存在的,再输入一个不存在的

mysql中的存储过程

mysql中的存储过程

 

带OUT参数的存储过程

delimiter $
#out参数就相当于一个自定义变量
CREATE PROCEDURE `myproout`(in name varchar(20),out psw varchar(20))
begin
    #把查询结果赋值给out参数
		select password into psw from admin where username=name;
    select psw;
end $

调用

#这里OUT参数要写变量@....
call myproout('php',@psw)$

调用结果

mysql中的存储过程

 

带INOUT参数的存储过程

delimiter $
create procedure myproinout(inout a int,inout b int)
begin
	set a = 2*a;
	set b = 2*b;
	select a,b;
end $

调用

mysql中的存储过程

调用的时候还在delimiter $运行窗口的话,结尾要用$,不是的话结尾就可以用回;

 

 

 

上一篇:MySQL收尾


下一篇:SonarQube的LDAP配置