1,讲讲什么是mysql存储过程,有哪些特性?
**mysql存储过程就是一组sql语句集,可以实现一下比较复杂的逻辑功能,类似于C语言的函数.数据库sql语言层面的代码封装与复用.** **有输入输出参数,可以声明变量,有一些控制语句,比如if/else,case,while等,通过写存储过程,可以去实现复杂的逻辑功能.** **拥有函数的普遍特性:模块化,封装,代码复用. 速度快,只有首次执行需经过编译和优化步骤,后继被调用可以直接执行,可以省去以上步骤.**
2,表达一下mysql存储过程的语句
delimiter 自定义结束符 create procedure 存储名([in,out,inout] 参数名 数据类型....) begin sql语句 end 自定义结束符 delimiter;
3,试着写一下变量定义和操作,调用一下;
delimiter $$ create procedure proc01() begin select empno,ename from emp; end $$ delimiter $$; **调用过程 call proc01();
4,介绍一下mysql的系统变量,给出相关语法
1,局部变量: 声明变量 declare var_name var_type [default var_value]; 例如:declare age int; 2,给变量赋值, select name[...]into var_name[...] from table where ...; 3,用户变量(会话变量):当前会话有效, 语法:@var_name 不需要提前声明,使用即声明 4,系统变量分为全局变量和会话变量,全局变量在mysql启动时由服务器自动将他们初始化为默认值,这些默认值可以通过my.ini这个文件来更改,会话变量在每次建立一个新的连接时候,由mysql来初始化,mysql将当前所有全局变量的值复制一份,如果没有更改过会话变量和全局变量,那么这些变量的值都是一样的. 5,全局变量和会话变量区别:对全局变量修改影响到整个服务器,但对会话变量修改,只会影响到当前会话. 6,某些系统变量的值可以被修改,但有些只可以读,用set语句进行更改系统变量的值
5,对全局变量演示一下,并且对其进行修改
1,全局变量@@global.某个变量的值 2,查看有哪些全局变量 show global variables 3,查看某个全局变量 select @@global.某个值 4,修改某个全局变量的值 set global xxx=
6,同5,对会话变量进行操作
1,会话变量 @@session.某个值 2,查看会话变量 show session variables 3,查看某个会话变量 select @@session.某个值 4,修改会话变量的值 set session.某个值=
7,讲述一下存储过程参数以及写出相关示例
1,in表示传入的参数,可以传入值或变量,仅在函数范围内有效 delimiter $$ create procedure in_test(in xxx varchar(10)) begin sql语句 end $$ delimiter ; 2,out 表示存储过程内部传出值来 delimiter $$ create procedure out_test(in xxx int ,out xxx varchar(50) ) begin sql语句 end $$ delimiter ; 3,inout表示外部传入的参数经过修改后可以返回的变量,既可以传入变量也可以修改变量 delimiter $$ create procedure inout_test(inout xxx varchar(50),inout xxx int) begin sql语句 end $$ delimiter ; set @xxx = ; set @xxx = ; call inout_test(@xxx, @xxx) ; select @xxx; select @xxx;
8,描述一下判断的流程控制,并且完成以下需求任务
-- 输入学生的成绩,来判断成绩的级别: /* score < 60 :不及格 score >= 60 , score <80 :及格 score >= 80 , score < 90 :良好 score >= 90 , score <= 100 :优秀 score > 100 :成绩错误 */
if 条件为真 then 执行语句1 elseif 条件为真 then 执行语句2 else 执行语句1和执行语句2不执行的语句 end id delimiter $$ create procedure proc(in score int)• begin• if score < 60 then select '不及格';• elseif score < 80 then select '及格' ;• elseif score < 90 then select '良好';• elseif score <= 100 then select '优秀';• else select '成绩错误';• end if;• end $$• delimiter ;• call proc_08_if(120)•
9,描述一下case流程控制
1,case case_value when when_value then statement_list [when when_value then statement_list] ... [else statement_list] end case 2,case when search_condition then statement_list [when search_condition then statement_list] ... [else statement_list] end case
10,描述一下while循环控制
[标签]while 循环条件 do 循环体; end while [标签];
11,描述一下repeat循环
[标签:]repeat 循环体; until 条件表达式 end repeat [标签];
12,描述一下loop循环
[标签:] loop 循环体; if 条件表达式 then leave [标签]; end if; end loop;
13,讲讲mysql的游标
1,游标是用来存储查询结果集的数据类型,在存储过程中可以使用光标对结果集进行循环的处理.使用游标需要经过这些步骤: 声明,打开,取值,关闭 2,语法格式: -- 声明语法 declare cursor_name cursor for select_statement -- 打开语法 open cursor_name -- 取值语法 fetch cursor_name into var_name [, var_name] ... -- 关闭语法 close cursor_name 游标的使用需要配合循环来把游标的数据一一插入
14,描述一下mysql存储过程的异常处理
在语法中,变量声明、游标声明、handler声明是必须按照先后顺序书写的,否则创建存储过程出错。