储存过程
增删改查+储存,听说这些做好后,好歹算是入门了。不知不觉自己都开始学习储存了,心中不禁一阵翻滚。
废话结束,开始回顾
储存过程:
储存过程有三中模式:
IN模式
OUT模式
INOUT模式
1.IN的模式
举个栗子___
- DELIMITER $$ # 定界符
- CREATE PROCEDURE user_main_pro1(IN v_id INT)
- BEGIN
- #定义变量
- DECLARE v_userName VARCHAR(50);
- #通过select...into...给变量赋值
- SELECT f_userName INTO v_userName FROM t_user_main WHERE f_userId = v_id;
- #执行DDL语句
- INSERT INTO t_user_main (f_userName) VALUES (v_userName);
- END $$ #存储过程创建结束
- DELIMITER; #恢复mysql分号定界符
其中# ~ 表示的是注释,注释是一个非常好的习惯,还可以将#替代成--
小结:
IN:不管内部储存过程pin(某个变量variables)是什么值,一旦参数在外部设定为@pin=X,那么最后pin的值就会变成X,而不会因为存储过程内容设置pin=y而返回y值
2.OUT的模式
举个栗子___
- DELIMITER $$
- CREATE PROCEDURE user_main_pro2(OUT v_count INT)
- BEGIN
- SELECT COUNT(*) INTO v_count FROM t_user_main;
- END $$
- DELIMITER
OUT:
不管外部储存过程pin(某个变量variables)是什么值,一旦参数在内部设定为@pin=y,那么最后pin的值就会变成y(储存过程中设置的值),而不会因为外部指定设置pin=x而返回y值
3.OUTIN模式
无栗子,
自己的理解:INOUT就是IN+OUT,然而这样的结果是最后相当于一个翻版,能够读取玩不文件的翻版而已。目测需要继续深入学习。
为了深入理解IN/OUT/INOUT的定义,先理解下面的内容:
理解:
语法
CREATE
FUNCTION
函数名(参数列表)
RETURNS
数据类型
或者(CREAT PRECEDURE 储存过程名(IN/OUT/INOUT 参数 数据类型)
begin
# 函数体
# 返回值
end
//
CALL 储存过程名(@参数)
返回值是在储存过程的内部,//以前都是在储存,CALL开始调用
外部变量? (全局变量)内部变量?(局部变量)
全局变量保存在内存的全局存储区中,占用静态的存储单元;局部变量保存在栈中,只有在所在函数被调用时才动态地为变量分配存储单元。
(1)栈(stack):由编译器进行管理,自动分配和释放,存放函数调用过程中的各种参数、局部变量、返回值以及函数返回地址。操作方式类似数据结构中的栈。
(2)全局(静态)存储区:分为DATA段和BSS段。DATA段(全局初始化区)存放初始化的全局变量和静态变量;BSS段(全局未初始化区)存放未初始化的全局变量和静态变量。程序运行结束时自动释放。其中BBS段在程序执行之前会被系统自动清0,所以未初始化的全局变量和静态变量在程序执行之前已经为0。
理解关键词对于理解整个储存过程,以及句子的语法结构有十分重要的意义。不懂行业内对应的关键词就如同:
SELECT you_study_process From you's study
#输出结果
'摸着石头过河的瞎子0.0'