【MySQL】存储过程初体验(MySQL)

存储过程初体验(MySQL)

1. 什么是存储过程?

存储过程可以封装SQL语句集,可以用来完成一些比较复杂的业务逻辑,并且可以出参和入参(这也就是为什么Java代码可以直接传参调用存储过程,完成一批操作的原因。)

2. 存储过程的优缺点

  • 优点
    1. 在生产环境下,可以实现不修改代码就可以修改业务逻辑,并且不需要重启服务器。
    2. 执行速度快,存储过程会比分散开的一条一条的SQL语句执行快。
  • 缺点
    1. 调试不方便,你要想,如果是JAVA代码实现的,打断点调试多方便,存储过程你并不能打断点。
    2. 迁移数据库就需要重新编写存储过程!因为对应的语法不一样。

3. MySQL存储过程使用

3.1 随便搞张表
CREATE TABLE `test_org` (
  `id` int(11) NOT NULL,
  `org_code` varchar(255) DEFAULT NULL,
  `org_name` varchar(255) DEFAULT NULL,
  `up_code` varchar(255) DEFAULT NULL,
  `org_level` varchar(255) DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

INSERT INTO `test_org` VALUES (1, 'fourth', '第四级部门', 'third', '4');
INSERT INTO `test_org` VALUES (2, 'third', '第三级部门', 'second', '3');
INSERT INTO `test_org` VALUES (3, 'second', '第二级部门', 'first', '2');
INSERT INTO `test_org` VALUES (4, 'first', '顶级部门', NULL, '1');
3.2 第一个存储过程体验
-- 声明语句结束符  可以自定义随便写
delimiter $$
create procedure hello_world()
begin
	-- 这里面写对于的操作SQL
	select * from test_org;
end $$

-- 调用
call hello_world('first');
3.3 传参的存储过程
-- 声明语句结束符  可以自定义随便写
delimiter $$
create procedure hello_world1(in orgCodeTemp VARCHAR(30))
begin
	-- 这里面写对于的操作SQL
	select * from test_org WHERE org_code = orgCodeTemp;
end $$

-- 调用
call hello_world1('first');
3.4 带 if 判断传参的存储过程
-- 声明语句结束符  可以自定义随便写
delimiter $$
create procedure hello_world2(in orgCodeTemp VARCHAR(30))
begin
	if orgCodeTemp='first'
	then
	select * from test_org WHERE org_code = orgCodeTemp;
	else
	select * from test_org;
	end if;
end $$
-- 调用
call hello_world2('asdasdasd');
3.5 带case的存储过程
-- 声明语句结束符  可以自定义随便写
delimiter $$
create procedure hello_world_var_case(in orgCodeTemp VARCHAR(30))
begin
	case orgCodeTemp
	when 'first' THEN
	select * from test_org WHERE org_code = orgCodeTemp;
	when 'second' THEN
	select * from test_org WHERE org_code = orgCodeTemp;
	else
	select * from test_org;
	end case;
end $$
-- 调用
call hello_world_var_case('first');
3.6 传多个参数的带case的存储过程
-- 声明语句结束符  可以自定义随便写
delimiter $$
create procedure hello_world_var_case1(in orgCodeTemp VARCHAR(30),in orgLevelTemp VARCHAR(30))
begin
	case orgCodeTemp
	when 'first' THEN
	select * from test_org WHERE org_code = orgCodeTemp;
	when 'second' THEN
	select * from test_org WHERE org_level = orgLevelTemp;
	else
	select * from test_org;
	end case;
end $$

-- 调用
call hello_world_var_case1('second','2');
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值