SQL存储过程(StoredProcedure)什么是存储过程?
存储过程(procedure)类似于C语⾔中的函数
怎么看eclipse是不是ee的⽤来执⾏管理任务或应⽤复杂的业务规则
中级程序员证书怎么考存储过程可以带参数,也可以返回结果
存储过程可以包含数据操纵语句、变量、逻辑 控制语句等
存储过程(Stored Procedure)是⼀组为了完成特定功能的SQL语句集,经编译后存储在数据库中,⽤户通过指定存储过程的名字并给定参数(如果该存储过程带有参数)来调⽤执⾏它。外部程序可以直接调⽤数据库⾥⾯定义好的存储过程,另外数据库内部的触发器(trigger)、或者其他存储过程也可以调⽤它。
存储过程的优点
(1)执⾏速度快:存储过程创建是就已经通过语法检查和性能优化,在执⾏时⽆需每次编译。存储在数据库服务器,性能⾼。
(2)允许模块化设计:只需创建存储过程⼀次并将其存储在数据库中,以后即可在程序中调⽤该过程任意次。存储过程可由在数据库编程⽅
⾯有专长的⼈员创建,并可独⽴于程序源代码⽽单独修改 。
(3)提⾼系统安全性:可将存储过程作为⽤户存取数据的管道。可以限制⽤户对数据表的存取权限,建⽴特定的存储过程供⽤户使⽤,完成
对数据的访问。
存储过程的定义⽂本可以被加密,使⽤户不能查看其内容。回调函数是同步还是异步
(4)减少⽹络流量:⼀个需要数百⾏Transact-SQL代码的操作由⼀条执⾏过程代码的单独语句就可实现,⽽不需要在⽹络中发送数百⾏代
码。
存储过程的缺点
1、存储过程会使得 数据库占⽤的系统资源加⼤(cpu、memory),数据库毕竟主要⽤来做数据存取的,并不进⾏复杂的业务逻辑操作。
2、因为存储过程依旧是sql,所以没办法像编程语⾔那样写出复杂业务逻辑对应的存储过程。
3、存储过程不容易进⾏调试。
4、存储过程书写及维护难度都⽐较⼤。
存储过程的分类
系统存储过程
由系统定义,存放在master数据库中
类似C语⾔中的系统函数
系统存储过程的名称都以“sp_”开头或”xp_”开头
⽤户⾃定义存储过程
由⽤户在⾃⼰的数据库中创建的存储过程
类似C语⾔中的⽤户⾃定义函数
关于MySQL的存储过程
存储过程是数据库存储的⼀个重要的功能,但是MySQL在5.0以前并不⽀持存储过程,这使得MySQL在应⽤上⼤打折扣。好在MySQL 5.0终于开始已经⽀持存储过程,这样即可以⼤⼤提⾼数据库的处理速度,同时也可以提⾼数据库编程的灵活性。
⼀、MySQL存储过程的创建
通过MySQL提供的Query browser来创建
1、⾸先我们通过Administrator在test 数据库中创建⼀个简单的表名叫”products“的,⾥⾯包括下⾯这两个字段:
2、然后打开Query Browser,并且在test中创建存储过程,存储过程名称为”GetAll“。
3、可以看到系统会默认加⼊⼀些内容。这些内容当然可以不⽤理会,我们的存储过程就是从BEGIN到END中间的那些。点击Continue可以把存储进程加⼊到test数据库的⽬录中去。当然这⾥系统提供的代码也⽐较简单,⼀个就是重新定义存储过程代码的分隔符为”$$“,因为默认的是”; “⽽分号却是SQL的分隔符所以要重新定义⼀下分隔符,然后等存储过程写完后在把分隔符恢复为”;“。接着分隔符定义的下⼀句就是如果当前存在同名的进 程,则进⾏删除。在下⾯就是创建进程了。
4、在begin和end之间 写⼊⼀⾏select代码
5、在右边的窗⼝中双击GetAll这个存储进程,并且执⾏,则得到下⾯这个结果
通过命令⾏创建
(1). 格式
MySQL存储过程创建的格式:
CREATE PROCEDURE 过程名 ([过程参数[,...]])
[特性 ...] 过程体
这⾥先举个例⼦:
mysql> DELIMITER //
mysql>CREATE PROCEDURE proc1(OUT s int)
->BEGIN
->SELECT COUNT(*) INTO s FROM user;
->END
-
>//
mysql> DELIMITER ;
注:(1)这⾥需要注意的是DELIMITER //和DELIMITER ;两句,DELIMITER是分割符的意思,因为MySQL默认以";"为分隔符,如果我们没有声明分割符,那么编译器会把存储过程当成SQL语句进⾏处理,则存储过程的编译过程会报错,所以要事先⽤DELIMITER关键字申明当前段分隔符,这样MySQL才会将";"当做存储过程中的代码,不会执⾏这些代码,⽤完了之后要把分隔符还原。
(2)存储过程根据需要可能会有输⼊、输出、输⼊输出参数,这⾥有⼀个输出参数s,类型是int型,如果有多个参数⽤","分割开。
(3)过程体的开始与结束使⽤BEGIN与END进⾏标识。
(2). 声明分割符
其实,关于声明分割符,上⾯的注解已经写得很清楚,不需要多说,只是稍微要注意⼀点的是:如果是⽤MySQL的Administrator管理⼯具时,可以直接创建,不再需要声明。vspring价格
(3). 参数
MySQL存储过程的参数⽤在存储过程的定义,共有三种参数类型,IN,OUT,INOUT,形式如:
CREATE PROCEDURE([[IN |OUT |INOUT ] 参数名 数据类形...])
IN 输⼊参数:表⽰该参数的值必须在调⽤存储过程时指定,在存储过程中修改该参数的值不能被返回,为默认值
OUT 输出参数:该值可在存储过程内部被改变,并可返回
js中replace函数INOUT 输⼊输出参数:调⽤时指定,并且可被改变和返回
Ⅰ. IN参数例⼦
创建:
mysql > DELIMITER //
mysql >CREATE PROCEDURE demo_in_parameter(IN p_in int)
->BEGIN
->SELECT p_in;
->SET p_in=2;
->SELECT p_in;
->END;
->//
mysql > DELIMITER ;
执⾏结果:
mysql >SET@p_in=1;
mysql > CALL demo_in_parameter(@p_in);
+------+
| p_in |
+------+
|1|
+------+
+------+
| p_in |
+------+
|2|
+------+
mysql>SELECT@p_in;
+-------+
|@p_in|
+-------+
|1|
+-------+
以上可以看出,p_in虽然在存储过程中被修改,但并不影响@p_id的值
Ⅱ.OUT参数例⼦
创建:
mysql > DELIMITER //
mysql >CREATE PROCEDURE demo_out_parameter(OUT p_out int)
->BEGIN
->SELECT p_out;
->SET p_out=2;
->SELECT p_out;
-
>END;
->//
mysql > DELIMITER ;
执⾏结果:
mysql >SET@p_out=1;
mysql > CALL sp_demo_out_parameter(@p_out);
+-------+
| p_out |
+-------+
|NULL|
+-------+
+-------+mysql查看所有存储过程
| p_out |
+-------+
|2|
+-------+
mysql>SELECT@p_out;
+-------+
| p_out |
+-------+
|2|
+-------+
Ⅲ. INOUT参数例⼦
创建:
mysql > DELIMITER //
mysql >CREATE PROCEDURE demo_inout_parameter(INOUT p_inout int) ->BEGIN
->SELECT p_inout;
->SET p_inout=2;
->SELECT p_inout;
->END;
->//
mysql > DELIMITER ;
执⾏结果:
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论