存储过程详解

变量

系统变量:
全局变量,会话变量
自定义变量:
用户变量,局部变量

系统变量

属于服务器层面

语法:
1. 查看所有系统变量
show global variables
show session variables
2. 条件筛选
show global variables like %...%
show session variables like %...%
3.指定查看某个系统变量
select @@gloabl .系统变量名
4.系统变量赋值
1.set global 系统变量名 = 值
2.@@global .系统变量名 = 值
默认都是 session

全局变量

跨连接,不是跨重启(服务器重启后 重新赋予初始值)

show global variables` `

show global variables like '%char%'` `

select @@global.autocommit` `

set @@global.autocommit=0	#取消自动提交(跨连接有效)

会话变量 不能跨连接

 select @@tx_isolation;	# 隔离级别
 set @@session.tx_isolation = 'read-uncommitted'  #设置为第一隔离级别
 set session tx_isolation = 'read-committed'	#第二隔离级别

自定义变量(任何地方)
声明 赋值 使用enmmmm…
作用域 :会话有效

1.声明,赋值 都是一样滴

set @a = 2
set @b:= 3
select @a:= 5 

赋值方式 二

select 字段 into 变量名
from 表

查看:

select @a

局部变量( 必须是 begin end 第一句话)
作用域:定义在 begin end 中有效的(弹幕说:你没学过java吗…)

声明:

declare 变量名 类型;
 declare 变量名 类型 default 值

赋值 使用

一样一样的(见全局赋值)

对比记忆一下?…算了吧

写个 a+b=?

set @a=1;
set @b=2;
set @sum = @a+@b;
select @sum	

存储过程:(对比 java 方法)

含义:一组预先编译好的sql语句集合,可理解为 批处理语句
减少编译次数,减少连接数据库次数,代码重用性,简化操作【暴露接口】

一,创建

create procedure 存储过程名zhi(参数列表)
BEGIN
	存储过程体(弹幕说:你没学过 c++吗 )
END

参数列表(参数模式,参数名,参数类型) 参数模式是啥子鬼
举个栗子: IN stuname varchar(20)

参数模式:三个

	in		:参数可以作为输入(传值进去)
	out		:该参数可以作为输出(做返回值,传值出去)
	inout	:既可以传入,又可以返回值

提示
存储过程体中每一条 SQL 语句的结尾要求必须加 ;
存储过程的结尾 可以 使用 delimiter 重新设置(避免与 ;混淆)

语法:

delimiter 结束标记

二,调用

call 存储过程名(参数列表)

1.空参数列表
插入五条记录
select* from admin

delimiter $
create procedure my()
BEGIN
	insert into admin(username,password)
	VALUES('jack','0000'),('rose','1111'),('lucy','2222');
END $
调用:
call my()$   (弹幕说 :navcat....里面这里加个结束符号会报错)

2.带参列表 IN模式,传入我女神,查询我女生的男盆友

delimiter $
create procedure mylady(IN beautyName VARCHAR(20))
BEGIN
	select bo.*
	from boys bo
	RIGHT JOIN beauty b on bo.id = b.boyfriend_id	#考虑到有滴人么有男盆友,所以外连接一下
	WHERE b.`name` = beautyName;
END $

CALL mylady('热巴')
create procedure mylogin(IN username VARCHAR(20),IN password VARCHAR(20))
BEGIN
	declare result int default 0;
	select count(*) into result
	from admin
	where admin.username = username
	and admin.password = password;
	select IF(result > 0,'成功','失败');
END $

CALL mylogin('jack','0000')

out 模式参数,inout模式参数不再详述,参考其他编程语言即可。

三,其他操作

补充:
局部变量 可以直接 set,不需要 @符号
删除:(只能单个删除)
drop procedure 存储过程名
查看存储过程
show create procedure mylady

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值