您的位置:首页 > 数据库 > MySQL

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;
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: