
SQL语句须要先编译然后实行,而存储历程(Stored Procedure)是一组为了完成特定功用的SQL语句集,经编译后存储在数据库中,用户经由过程指定存储历程的名字并给定参数(假如该存储历程带有参数)来挪用实行它。存储历程是可编程的函数,在数据库中建立并保留,可以由SQL语句和控制构造构成。当想要在差别的应用顺序或平台上实行雷同的函数,或许封装特定功用时,存储历程黑白常有效的。数据库中的存储历程可以看作是对编程中面向对象要领的模仿,它许可控制数据的接见体式格局。
引荐课程:MySql教程。
存储历程的长处:
(1).加强SQL言语的功用和灵活性:存储历程可以用控制语句编写,有很强的灵活性,可以完成庞杂的推断和较庞杂的运算。
(2).规范组件式编程:存储历程被建立后,可以在顺序中被屡次挪用,而没必要从新编写该存储历程的SQL语句。而且数据库专业人员可以随时对存储历程举行修正,对应用顺序源代码毫无影响。
(3).较快的实行速率:假如某一操纵包括大批的Transaction-SQL代码或分别被屡次实行,那末存储历程要比批处置惩罚的实行速率快许多。由于存储历程是预编译的。在初次运转一个存储历程时查询,优化器对其举行剖析优化,而且给出终究被存储在体系表中的实行计划。而批处置惩罚的Transaction-SQL语句在每次运转时都要举行编译和优化,速率相对要慢一些。
(4).削减收集流量:针对同一个数据库对象的操纵(如查询、修正),假如这一操纵所触及的Transaction-SQL语句被构造进存储历程,那末当在客户盘算机上挪用该存储历程时,收集中传送的只是该挪用语句,从而大大削减收集流量并降低了收集负载。
(5).作为一种平安机制来充分利用:经由过程对实行某一存储历程的权限举行限定,可以完成对响应的数据的接见权限的限定,避免了非受权用户对数据的接见,保证了数据的平安。
MySQL的存储历程
存储历程是数据库的一个主要的功用,MySQL 5.0之前并不支撑存储历程,这使得MySQL在应用上大打折扣。幸亏MySQL 5.0最先支撑存储历程,如许即可以大大进步数据库的处置惩罚速率,同时也可以进步数据库编程的灵活性。
MySQL存储历程的建立
语法
CREATE PROCEDURE 历程名([[IN|OUT|INOUT] 参数名 数据范例[,[IN|OUT|INOUT] 参数名 数据范例…]]) [特征 ...] 历程体 DELIMITER // CREATE PROCEDURE myproc(OUT s int) BEGIN SELECT COUNT(*) INTO s FROM students; END // DELIMITER ;
分隔符
MySQL默许以";"为分隔符,假如没有声明支解符,则编译器会把存储历程当作SQL语句举行处置惩罚,因而编译历程会报错,所以要事先用“DELIMITER //”声明当前段分隔符,让编译器把两个"//"之间的内容当作存储历程的代码,不会实行这些代码;“DELIMITER ;”的意为把分隔符复原。
参数
存储历程根据须要能够会有输入、输出、输入输出参数,假如有多个参数用","支解开。MySQL存储历程的参数用在存储历程的定义,共有三种参数范例,IN,OUT,INOUT:
IN参数的值必须在挪用存储历程时指定,在存储历程当中修正该参数的值不能被返回,为默许值OUT:该值可在存储历程内部被转变,并可返回INOUT:挪用时指定,而且可被转变和返回
历程体
历程体的最先与完毕运用BEGIN与END举行标识。
总结
本次主如果控制了关于存储历程的运用,总的来讲,存储历程实际上相似于C++中的函数,而在C++中我们是须要在建立这一历程的文件中去挪用这一函数,然则关于存储历程来讲,相称因而将这一操纵历程存储在数据库中,可以运用call与对其举行挪用,并输入或许输出一些参数和效果。
印象最深的是相似“in n int”和“out sum int”如许的关于输入输出的定义,经由过程检察相干博客,可以总结以下关于输入输出定义的运用规律:
MySQL存储历程的参数用在存储历程的定义,共有三种参数范例
IN,OUT,INOUT
花样为:Create procedure|function([[IN |OUT |INOUT ] 参数名 数据类形...])
IN 输入参数
示意该参数的值必须在挪用存储历程时指定,在存储历程当中修正该参数的值不能被返回,为默许值
OUT 输出参数
该值可在存储历程内部被转变,并可返回
INOUT 输入输出参数
挪用时指定,而且可被转变和返回
IN 和 OUT在试验中已有体味,主如果对INOUT的明白,这里援用一个例子:
参数inout的运用实例(既能输入一个值又能传出来一个值)
语句功用:传一个岁数,自动让岁数增进10岁
create procedure p3(inout age int)
begin
set age:=age+10;
end
个中:挪用的时刻,inout型的参数值既是输入范例又是输出范例,给它一个值,值不是变量,因而我们须要先设置一个变量并初始化这个值,挪用的时刻直接传这个变量即可。
set @currentAge=8$
call p3(@currentAge)$
select @currentAge$
建立并实行完存储历程,运转效果以下:
以上就是数据库存储历程要怎样写的细致内容,更多请关注ki4网别的相干文章!