数据库存储过程要怎么写
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$
创建并执行完存储过程,运行结果如下:
以上就是数据库存储过程要怎么写的详细内容,更多请关注其它相关文章!
更多技巧请《转发 + 关注》哦!
数据库基础05:存储过程、触发器的创建、执行、修改与删除
本文介绍基于Microsoft SQL Server软件,实现数据库存储过程与触发器的创建、执行、修改与删除等操作。
数据库系列文章请见专栏:。
系列文章中示例数据来源于《 SQL Server实验指导(2005版)》一书。尊重版权,因此遗憾不能将相关示例数据一并提供给大家;但是依据本系列文章的思想与对操作步骤、代码的详细解释,大家用自己手头的数据,可以将相关操作与分析过程加以完整重现。
(1) 启动Microsoft SQL Server 2008 R2软件;
(2) 在“对象资源管理器”窗格中,在“数据库”处右键,在弹出的菜单中选择“附加”选项;
(3) 选择需要加以附加的jxsk数据库物理文件,选择定位文件夹“G:\\sql\\chutianjia sql”并选择对应数据库jxsk的物理文件并选择“确定”按钮,再次选择“确定”即可;
(4) 在“对象资源管理器”中选择“数据库”→“jxsk”→“可编程性”→“存储过程”;右击,在弹出的窗口中选择“新建存储过程”选项;如下图;
(5) 将原有模板语句:
修改为:
(6) 单击对勾按钮进行语法检查,如下图;单击“工具栏”中的“执行(x)”按钮,即可执行上述T-SQL语句,如下图;
(7) 在“对象资源管理器”中选择“数据库”→“jxsk”→“可编程性”→“存储过程”;看到已存在通过上述步骤建立的存储过程;
(1) 单击屏幕上方 “工具栏”菜单中的“新建查询”按钮,打开“查询编辑器”窗口,并在“查询编辑器”窗口中输入以下T-SQL语句:
(2) 单击 “工具栏”中的“执行(x)”按钮,即可执行上述T-SQL语句,如下图;
(1) 单击屏幕上方 “工具栏”菜单中的“新建查询”按钮,打开“查询编辑器”窗口,并在“查询编辑器”窗口中输入以下T-SQL语句:
(2) 单击 “工具栏”中的“执行(x)”按钮,即可执行上述T-SQL语句,如下图;
(3) 在“对象资源管理器”中选择“数据库”→“jxsk”→“可编程性”→“存储过程”;看到已存在通过上述步骤建立的存储过程;
(1) 单击屏幕上方 “工具栏”菜单中的“新建查询”按钮,打开“查询编辑器”窗口,并在“查询编辑器”窗口中输入以下T-SQL语句:
(2) 单击 “工具栏”中的“执行(x)”按钮,即可执行上述T-SQL语句,如下图;
(1) 在“对象资源管理器”中选择“数据库”→“jxsk”→“可编程性”→“存储过程”;右击存储过程Pro_Qsinf,在弹出的窗口中选择“修改”选项,如下图;
(2) 将原有模板语句修改为
(3) 单击对勾按钮进行语法检查,如下图;单击 “工具栏”中的“执行(x)”按钮,即可执行上述T-SQL语句,如下图;
(1) 单击屏幕上方 “工具栏”菜单中的“新建查询”按钮,打开“查询编辑器”窗口,并在“查询编辑器”窗口中输入以下T-SQL语句:
(2) 单击 “工具栏”中的“执行(x)”按钮,即可执行上述T-SQL语句,如下图;
(3) 在“对象资源管理器”中选择“数据库”→“jxsk”→“可编程性”→“存储过程”;点击存储过程Pro_Qsinf,选择“参数”,可发现其定义发生变化;
(1) 在“对象资源管理器”中选择“数据库”→“jxsk”→“可编程性”→“存储过程”;右击存储过程Pro_Qsinf,在弹出的窗口中选择“删除”选项;
(2) 选择确定按钮,存储过程即被删除;如下图;
(1) 单击屏幕上方 “工具栏”菜单中的“新建查询”按钮,打开“查询编辑器”窗口,并在“查询编辑器”窗口中输入以下T-SQL语句:
(2) 单击 “工具栏”中的“执行(x)”按钮,即可执行上述T-SQL语句,如下图;删除后结果如下下图;
(1) 在“对象资源管理器”中选择“数据库”→“jxsk”→“表”→“dbo.c”;右击触发器,在弹出的窗口中选择“新建触发器”选项;如下图;
(2) 窗口内原有语句为:
需将其更改为:
(3) 单击 “工具栏”中的“执行(x)”按钮,即可执行上述T-SQL语句,如下图;
(1) 查看数据库表S与SC,如下图;
(2) 删除原有S与SC之间的外键关系;修改S表中S1为S9,执行操作,如下图;
(3) 查看SC表中数据,发现其S1已改变为S9,且位置也发生相应变化,如下图;
(1) 在“对象资源管理器”中选择“数据库”→“jxsk”→“表”→“dbo.SC”;右击触发器,在弹出的窗口中选择“新建触发器”选项;如下图;
(2) 窗口内原有语句为:
需将其更改为:
(3) 单击 “工具栏”中的“执行(x)”按钮,即可执行上述T-SQL语句,如下图;
(4) 查看数据库表S与SC,可发现在SC中有两条S号学生的记录如下两图;此时将SC中的第一条S9记录改为S1,发现修改后其数据再次恢复原有状态;如以下第三幅图;
(1) 点击屏幕上方 “工具栏”菜单中的“新建查询”按钮,打开“查询编辑器”窗口,并在“查询编辑器”窗口中输入以下T-SQL语句:
(2) 单击 “工具栏”中的“执行(x)”按钮,即可执行上述T-SQL语句,如下图;
(3) 在“对象资源管理器”中选择“数据库”→“jxsk”→“表”→“dbo.SC”→“触发器”,可看到通过上述步骤生成的触发器已存在;如下图;
(4) 查看数据库表SC,如下图;
(5) 单击屏幕上方 “工具栏”菜单中的“新建查询”按钮,打开“查询编辑器”窗口,并在“查询编辑器”窗口中输入以下T-SQL语句:
(6) 单击 “工具栏”中的“执行(x)”按钮,即可执行上述T-SQL语句,如下图;
(7) 可以在下方窗口中看到4条系统信息,表示:第1条INSERT语句因成绩为190超出范围,而要求重新输入;第2条INSERT语句因成绩为100在正常范围内,而插入表中;第3条UPDATE语句因成绩为130超出范围,而要求重新输入;第4条UPDATE语句因成绩为60在正常范围内,修改成功;查看数据库表SC的数据。在数据库表SC数据窗口中,单击感叹号按钮,更新表SC中的数据,如下图;可以看到增加了一个记录(\’S9”,“C5’,100),修改了一条记录(\’S2\’,C5\’,60),即是步骤中SQL语句执行的结果。
(1) 点击屏幕上方 “工具栏”菜单中的“新建查询”按钮,打开“查询编辑器”窗口,并在“查询编辑器”窗口中输入以下T-SQL语句:
(2) 单击 “工具栏”中的“执行(x)”按钮,即可执行上述T-SQL语句;
(3) 在“对象资源管理器”中选择“数据库”→“jxsk”→“表”→“dbo.C”→“触发器”,可看到通过上述步骤生成的触发器已存在;
(4) 打开数据库表C与SC,发现在SC表中有三条关于C1的记录,如下图;
(5) 单击屏幕上方 “工具栏”菜单中的“新建查询”按钮,打开“查询编辑器”窗口,并在“查询编辑器”窗口中输入以下T-SQL语句:
(6) 单击 “工具栏”中的“执行(x)”按钮,即可执行上述T-SQL语句,如下图;
(7) 在数据库表SC中发现课程C1有关的数据已经被删除;
(1) 点击“对象资源管理器”中选择“数据库”→“jxsk”→“表”→“dbo.S”→“触发器”,右击选择“修改”选项,如下图;
(2) 窗口内原有语句为:
需将其更改为:
(3) 单击 “工具栏”中的“执行(x)”按钮,即可执行上述T-SQL语句,如下图;
(4) 在“对象资源管理器”中选择“数据库”→“jxsk”→“表”→“dbo.S”→“触发器”,双击原有触发器,发现其已被修改;
(1) 点击屏幕上方 “工具栏”菜单中的“新建查询”按钮,打开“查询编辑器”窗口,并在“查询编辑器”窗口中输入以下T-SQL语句:
(2) 单击 “工具栏”中的“执行(x)”按钮,即可执行上述T-SQL语句,如下图;
(3) 在“对象资源管理器”中选择“数据库”→“jxsk”→“表”→“dbo.C”→“触发器”,双击原有触发器,发现其已被修改;
(4) 在数据库表C中删除任意一条记录,发现数据库表SC与TC中记录也随之改变;
(1) 点击“对象资源管理器”中选择“数据库”→“jxsk”→“表”→“dbo.S”→“触发器”,右击原有触发器,在弹出的菜单中选择“删除”,点击确定;
(2) 在原有位置已看不到原有触发器;
(1) 单击屏幕上方 “工具栏”菜单中的“新建查询”按钮,打开“查询编辑器”窗口,并在“查询编辑器”窗口中输入以下T-SQL语句:
(2) 单击 “工具栏”中的“执行(x)”按钮,即可执行上述T-SQL语句,如下图;
(3) 在“对象资源管理器”中选择“数据库”→“jxsk”→“表”→“dbo.C”→“触发器”,已看不到原有触发器,如下图;
本文作者及来源:Renderbus瑞云渲染农场https://www.renderbus.com
文章为作者独立观点不代本网立场,未经允许不得转载。