MySQL存储过程

MySQL存储过程

存储过程

定义存储过程

delimiter ;;
create procedure get_user_count()
begin
	select count(*) as user_count from sys_user;
end;;
delimiter;

关于分隔符

MySQL语句分隔符为;,MySQL命令行程序也使用;作为语句分隔符。如果通过命令行执行存储过程会解释存储过程自身内的;字符,会使存储过程中的SQL出现语法错误。

调用存储过程

call get_user_count();

删除存储过程

drop procedure get_user_count;

使用参数

参数中有out

-- 使用参数
-- in 传递到存储过程
-- out 从存储过程传出
-- inout 对存储过程传入和传出
delimiter ;;
create procedure get_count(
	out user_count int(10),
	out role_count int(10),
	out dict_count int(10))
begin
	select count(*) into user_count from sys_user;
	select count(*) into role_count from sys_role;
	select count(*) into dict_count from sys_dict;
end;;
delimiter ;

-- 调用
-- 所有MySQL变量都必须以@开始
-- 不能通过一个参数返回多个行和列
call get_count(@user_count, @role_count, @dict_count);
select @user_count, @role_count, @dict_count;

参数中有in有out

drop procedure if exists get_user_by_name;
delimiter ;;
create procedure get_user_by_name(
	in user_name varchar(45),
	out user_id int(10))
begin
	select id from sys_user where user_name = user_name limit 1 into user_id;
end;;
delimiter ;

-- 调用
call get_user_by_name('admin', @admin_id);
select @admin_id;

复杂一点的

-- comment 给存储过程加注释
-- 定义
delimiter ;;
create procedure insert_user(
	in userName varchar(50),
	in defaultPass boolean,
	out userId int
) comment 'create user'
begin
	declare pass varchar(50) default null;
	
	if defaultPass then
		set pass = '123456';
	end if;
	
	insert into sys_user(user_name, user_password, create_time) 
	values (userName, pass, now());
	select LAST_INSERT_ID() into userId;
end;;
delimiter ;

-- 调用
call insert_user('张三', false, @userId1);
call insert_user('李四', true, @userId2);
select @userId1, @userId2;
select id, user_name, user_password, create_time from sys_user;

转载于:https://my.oschina.net/yysue/blog/3004407

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值