1.新建一个数据库,在数据库里面新建一张user表
新建数据表的语句是:
CREATE TABLE `user` (
`user_id` bigint(20) NOT NULL,
`user_name` varchar(20) DEFAULT NULL,
`user_age` int(11) DEFAULT NULL,
`user_password` varchar(20) DEFAULT NULL,
`user_money` double DEFAULT NULL,
`user_create_time` datetime DEFAULT NULL,
PRIMARY KEY (`user_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci;
新增数据:
insert into user(user_id, user_name, user_age, user_password, user_money, user_create_time)
values('1', '张三', '21', '123456', '12', '2018-08-27 16:31:25'),
('2', '李四', '23', '123456', '34', '2018-08-21 00:00:00'),
('3', '王五', '25', '123456', '56', '2018-08-21 00:00:00'),
('4', '赵无极', '45', '123456', '43', '2018-08-21 00:00:00'),
('5', '甜心', '34', '123456', '22', '2018-08-21 00:00:00');
2.写存储过程
我设计了两个存储过程:
1.login存储过程源码如下:
传进去用户id和密码返回是否验证成功。
delimiter //
CREATE PROCEDURE `login`(in id int,in pw varchar(20),out result varchar(100))
begin
declare a int;
set a = 0;
select count(*) into a from user where user_id = id and user_password = pw;
case when a > 0 then
set result = "success";
update user set user_create_time = now() where user_id = id;
else
set result = "fail";
end case;
select result;
end; //
2.userMoney存储过程源码如下:
该存储过程没有什么意义的,但是为了使用三个循环的而新建的一个字符串拼接的存储过程,纯属练习,勿喷哦^_^!
delimiter //
CREATE PROCEDURE `userMoney`(inout num int,inout result varchar(100))
begin
while num < 5 do
set result = concat(result,num,'->');
set num = num + 1;
end while;
repeat
set result = concat(result,num,'=>>');
set num = num + 1;
until num >10
end repeat;
tiaojian: loop
if num > 15 then
leave tiaojian;
else
set num = num + 1;
end if;
set result = concat(result,num,"++>");
iterate tiaojian;
end loop;
select result;
end; //
3.使用储存过程
写完存储过程就是调用了呀,我们来使用了哦;
call login(1,"123456",@result); 返回的是:
+---------+
| @result |
+---------+
| success |
+---------+
现在result的值为success,可以select @result获取到result的值;
set @num = 1;
set @result = ' ';
call userMoney(@num, @result);
+-----------------------------------------------------------------+
| result |
+-----------------------------------------------------------------+
| 1->2->3->4->5=>>6=>>7=>>8=>>9=>>10=>>12++>13++>14++>15++>16++> |
+-----------------------------------------------------------------+
select @num, @result;获取num和result的值
+------+-----------------------------------------------------------------+
| @num | @result |
+------+-----------------------------------------------------------------+
| 16 | 1->2->3->4->5=>>6=>>7=>>8=>>9=>>10=>>12++>13++>14++>15++>16++> |
+------+-----------------------------------------------------------------+
4.使用心得
IN
- 是默认模式。在存储过程中定义IN
参数时,调用程序必须将参数传递给存储过程。 另外,IN
参数的值被保护。这意味着即使在存储过程中更改了IN
参数的值,在存储过程结束后仍保留其原始值。换句话说,存储过程只使用IN
参数的副本。OUT
- 可以在存储过程中更改OUT
参数的值,并将其更改后新值传递回调用程序。请注意,存储过程在启动时无法访问OUT
参数的初始值。INOUT
-INOUT
参数是IN
和OUT
参数的组合。这意味着调用程序可以传递参数,并且存储过程可以修改INOUT
参数并将新值传递回调用程序。- 当将单个表达式与唯一值的范围进行比较时,简单CASE语句比IF语句更易读。另外,简单
CASE
语句比IF
语句更有效率。 - 当您根据多个值检查复杂表达式时,
IF
语句更容易理解。 - 如果您选择使用
CASE
语句,则必须确保至少有一个CASE
条件匹配。否则,需要定义一个错误处理程序来捕获错误。IF
语句则不需要处理错误。 - 在某些情况下,
IF
和CASE
混合使用反而使您的存储过程更加可读和高效。 LEAVE
语句用于立即退出循环,而无需等待检查条件。LEAVE
语句的工作原理就类似PHP,C/C++
,Java等其他语言的break
语句一样。ITERATE
语句允许您跳过剩下的整个代码并开始新的迭代。ITERATE
语句类似于PHP
,C/C++
,Java
等中的continue
语句。- repeater和do while有点相似,先执行后判断,loop其实可以说和goto语句相似
<_^-^__^-^__^-^__^-^__^-^__^-^__^-^__菜鸟学习中,有什么不对请多多指教__^-^__^-^__^-^__^-^__^-^__^-^__^-^__^-^_>