mysql 存储函数和过程的总结
2015-09-11 18:16
666 查看
1、 存储过程和函数实在数据中定义一些sql语句的集合,然后直接调用。避免开发人员编写相同的sql语句。
2、 创建存储过程create proceduresp_name(proc_paremeter)
[characteristic]
Routine_body
这里的sp_name就是你的存储过程的名字,然后里面的参数由三部分组成,输入类型,参数名称,参数类型。而里面的characteristic有多个取值,LANGUAGE SQL,[NOT]
DETERMINISTIC,{CONTAIN SQL|NO SQL|READS SQLDATA|MODIFIES SQL DATA} SQL SECURITY{DEFINER|INVOKER} COMMENT ‘strting’
举个实例
Delimiter &&
Create procedure count_from_user(in id int,out countint)
Reads sql data
Begin
Select count(*) into count where id=id;
End&&
3、 创建存储函数create functionsp_name(func_parameter)
Returns type
[characteristic]
Routine_body
Type参数指定存储函数的参数类型,其他的解释和存储过程差不多。
举个实例
Delimiter&&
Create function namne_from_user(id int)
Rerturns varchar(20)
Begin
Return (select name from user where id=id);
End&&
4、 变量的使用,首先你要血鬼定义变量,格式为declarevar_name type [DEFAULT value]例如declare my_sql intDEFAULT 10。如果定义了变量没赋值,可以set var_name=value例如set my_sql=30。Mysql中还可以用select……into为变量赋值,例如selectcid into my_sql from user where id=2(对了变量的使用在存储过程或者函数中)
5、定义条件和处理程序。Mysql中可以使用declare关键字定义条件。Decare condition_namecondtion for contion_value ;condition value: sqlstate_value|mysql_error_code
例子:declare can_not_find condtion for sqlstate ‘42so2’;declare can_not_find condtion for1146;
定义处理程序 declare hanler_type handler for condtion_value这里的handler有三种类型continue |exit|undo 然后里面的condition_value有多种。SQLSATE_VALUE和Mysql_Error_Code与条件定义中的是同一个意思。CONDTION_NAME是declare定义的条件名称。SQLWARNING表示所有以01开头的sqltate_value值。Notfound表示多有以02开始的Sqlstate_Value值。SQLEXCEPTION表示所有没有被SQLWARNINg或Not
Found所捕获的
SQLSTARE_VALUE值
例子
Declare exit handler for NOT FOUND set @info=’cannot find’;
6、光标的使用。查询语句可能查询出多条记录。在存储过程和函数中使用光标来读取查询结果集中的记录。光标必须声明在处理程序之前,并且声明在变量和条件之后
(1)声明光标 格式declare cursor_namecursor for select_statement;例子
Declare cur_employee cursor for select name,age fromemployee;
(2)打开光标 格式open sursor_name;
(3)使用光标 fetch cur_name intovar_name[,var_name]
例子:fetch cur_employee into emp_name,emp_age;
(4)关闭光标 格式 close cursor_name;
流程控制的作用
1、 if语句 ifage>20 then set @count1=@count+1;
elseif age=20 then @count2=@count+1;
else@count3=@count3+1;
end if;
2、 case语句 caseage
when 20 then set @count1=@count1+1;
else set @count2=@count2+1;
end case;
3、 loop语句(loop语句可以使某些特定的语句重复执行,实现一个简单的循环。单数loop语句本身没有停止循环的语句,必须是遇到leave语句才能停止循环
add_num:loop
set @count=@count+1;
end loop add_num;(这里面的语句会重复执行)
4、 leave语句主要是用于跳出循环控制,例子
add_num:loop
set @count=@count+1;
if @count=100 then
leave add_num;
end loop add_num;
5、 iterate语句。这条语句也是用来跳出循环的语句,这可语句是跳出本次循环,直接进入写一次循环。类似c 语言中的countine。例子
add_num:loop
set @count=@count+1;
if @count=100 then
leave add_num;
else if mod($count,3)=0 then
iterate add_num;
select * from employee;
end loop add_num;
6、 repeat语句,这条语句是有条件控制的循环语句。当满足特定条件时,就会跳出循环语句。例子
repeat
set @count=@count+1;
until @count=100;
end repeat;
7、 while语句。这条语句也是有条件的控制的循环语句。但while语句和repeat语句是不一样的。While语句是当满足条件时,执行循环内的语句。
While @count<100 do
Set @count=@count+1;
End while;
二、调用存储过程和函数
1、调用存储过程,mysql使用call语句来调用存储过程。调用完成后,数据库系统将执行存储过程中的语句。然后将结果返回给输出值。
例子call num_from_employee(1002,@n);
Select @n;
2、调用存储函数,使用过程和mysql的内部函数的使用方法一样的。例子
Select name_from_employee(3);
三、查看存储过程和函数
使用show status语句来查看存储过程和函数的状态,例子
Show {procedure|function}status like ‘num_from_employee’;
使用show create 语句来查看存储过程和函数的定义
Show create {procedure|function} sq_name;
使用information_schema.routiness表查看
Select * from information_schema.routines whereroutine_name=’sp_name’;
四、修改存储过程和函数
Alter {procedure|function}sp_name[characteristic]
{contains sql|no sql|reads sql data|modifies sql data}
|sql security{definer|invoke}
|comment ‘string’
五、删除存储过程和函数
Drop {procedure|function} sp_name;
2、 创建存储过程create proceduresp_name(proc_paremeter)
[characteristic]
Routine_body
这里的sp_name就是你的存储过程的名字,然后里面的参数由三部分组成,输入类型,参数名称,参数类型。而里面的characteristic有多个取值,LANGUAGE SQL,[NOT]
DETERMINISTIC,{CONTAIN SQL|NO SQL|READS SQLDATA|MODIFIES SQL DATA} SQL SECURITY{DEFINER|INVOKER} COMMENT ‘strting’
举个实例
Delimiter &&
Create procedure count_from_user(in id int,out countint)
Reads sql data
Begin
Select count(*) into count where id=id;
End&&
3、 创建存储函数create functionsp_name(func_parameter)
Returns type
[characteristic]
Routine_body
Type参数指定存储函数的参数类型,其他的解释和存储过程差不多。
举个实例
Delimiter&&
Create function namne_from_user(id int)
Rerturns varchar(20)
Begin
Return (select name from user where id=id);
End&&
4、 变量的使用,首先你要血鬼定义变量,格式为declarevar_name type [DEFAULT value]例如declare my_sql intDEFAULT 10。如果定义了变量没赋值,可以set var_name=value例如set my_sql=30。Mysql中还可以用select……into为变量赋值,例如selectcid into my_sql from user where id=2(对了变量的使用在存储过程或者函数中)
5、定义条件和处理程序。Mysql中可以使用declare关键字定义条件。Decare condition_namecondtion for contion_value ;condition value: sqlstate_value|mysql_error_code
例子:declare can_not_find condtion for sqlstate ‘42so2’;declare can_not_find condtion for1146;
定义处理程序 declare hanler_type handler for condtion_value这里的handler有三种类型continue |exit|undo 然后里面的condition_value有多种。SQLSATE_VALUE和Mysql_Error_Code与条件定义中的是同一个意思。CONDTION_NAME是declare定义的条件名称。SQLWARNING表示所有以01开头的sqltate_value值。Notfound表示多有以02开始的Sqlstate_Value值。SQLEXCEPTION表示所有没有被SQLWARNINg或Not
Found所捕获的
SQLSTARE_VALUE值
例子
Declare exit handler for NOT FOUND set @info=’cannot find’;
6、光标的使用。查询语句可能查询出多条记录。在存储过程和函数中使用光标来读取查询结果集中的记录。光标必须声明在处理程序之前,并且声明在变量和条件之后
(1)声明光标 格式declare cursor_namecursor for select_statement;例子
Declare cur_employee cursor for select name,age fromemployee;
(2)打开光标 格式open sursor_name;
(3)使用光标 fetch cur_name intovar_name[,var_name]
例子:fetch cur_employee into emp_name,emp_age;
(4)关闭光标 格式 close cursor_name;
流程控制的作用
1、 if语句 ifage>20 then set @count1=@count+1;
elseif age=20 then @count2=@count+1;
else@count3=@count3+1;
end if;
2、 case语句 caseage
when 20 then set @count1=@count1+1;
else set @count2=@count2+1;
end case;
3、 loop语句(loop语句可以使某些特定的语句重复执行,实现一个简单的循环。单数loop语句本身没有停止循环的语句,必须是遇到leave语句才能停止循环
add_num:loop
set @count=@count+1;
end loop add_num;(这里面的语句会重复执行)
4、 leave语句主要是用于跳出循环控制,例子
add_num:loop
set @count=@count+1;
if @count=100 then
leave add_num;
end loop add_num;
5、 iterate语句。这条语句也是用来跳出循环的语句,这可语句是跳出本次循环,直接进入写一次循环。类似c 语言中的countine。例子
add_num:loop
set @count=@count+1;
if @count=100 then
leave add_num;
else if mod($count,3)=0 then
iterate add_num;
select * from employee;
end loop add_num;
6、 repeat语句,这条语句是有条件控制的循环语句。当满足特定条件时,就会跳出循环语句。例子
repeat
set @count=@count+1;
until @count=100;
end repeat;
7、 while语句。这条语句也是有条件的控制的循环语句。但while语句和repeat语句是不一样的。While语句是当满足条件时,执行循环内的语句。
While @count<100 do
Set @count=@count+1;
End while;
二、调用存储过程和函数
1、调用存储过程,mysql使用call语句来调用存储过程。调用完成后,数据库系统将执行存储过程中的语句。然后将结果返回给输出值。
例子call num_from_employee(1002,@n);
Select @n;
2、调用存储函数,使用过程和mysql的内部函数的使用方法一样的。例子
Select name_from_employee(3);
三、查看存储过程和函数
使用show status语句来查看存储过程和函数的状态,例子
Show {procedure|function}status like ‘num_from_employee’;
使用show create 语句来查看存储过程和函数的定义
Show create {procedure|function} sq_name;
使用information_schema.routiness表查看
Select * from information_schema.routines whereroutine_name=’sp_name’;
四、修改存储过程和函数
Alter {procedure|function}sp_name[characteristic]
{contains sql|no sql|reads sql data|modifies sql data}
|sql security{definer|invoke}
|comment ‘string’
五、删除存储过程和函数
Drop {procedure|function} sp_name;
相关文章推荐
- MySQL之——数据库双机热备的配置方法
- Mysql字段长度限制你真的了解吗?
- 【MySQL】sync_binlog innodb_flush_log_at_trx_commit 浅析
- mysql学习(4)-mysqldump备份和恢复数据
- mysql备份之xtrabackup
- mysql参数配置调优详解配置(1)
- Mysql事务处理
- mysql参数配置调优详解配置(2)
- mysql file sort
- MySQL 触发器简单实例
- Mysql分库分表方案
- mysql 安装配置的问题
- 解决Mysql导入乱码问题
- MySql中in和exists效率
- 使用innodb_force_recovery解决MySQL崩溃无法重启问题
- Mysql存储过程语法
- 【MySQL】查看MySQL配置文件路径及相关配置
- mac上终端起动MySQL的方法
- Navicat For Mysql快捷键
- Mysql 访问服务器数据库 没有权限 access denied for user