| 
                        副标题[/!--empirenews.page--]
                           
MySQL 5.0 版本开始支持存储过程。 
存储过程(Stored Procedure)是一种在数据库中存储复杂程序,以便外部程序调用的一种数据库对象。 
存储过程是为了完成特定功能的SQL语句集,经编译创建并保存在数据库中,用户可通过指定存储过程的名字并给定参数(需要时)来调用执行。 
存储过程思想上很简单,就是数据库 SQL 语言层面的代码封装与重用。 
优点 
    -  存储过程可封装,并隐藏复杂的商业逻辑。
 
    -  存储过程可以回传值,并可以接受参数。
 
    -  存储过程无法使用 SELECT 指令来运行,因为它是子程序,与查看表,数据表或用户定义函数不同。
 
    -  存储过程可以用在数据检验,强制实行商业逻辑等。
 
 
缺点 
    -  存储过程,往往定制化于特定的数据库上,因为支持的编程语言不同。当切换到其他厂商的数据库系统时,需要重写原有的存储过程。
 
    -  存储过程的性能调校与撰写,受限于各种数据库系统。
 
 
存储过程的创建和调用 
 
创建存储过程 
- CREATE  
 -  [DEFINER = { user | CURRENT_USER }]  
 -  PROCEDURE sp_name ([proc_parameter[,...]])  
 -  [characteristic ...] routine_body   
 - proc_parameter:  
 -  [ IN | OUT | INOUT ] param_name type   
 - characteristic:  
 -  COMMENT 'string'  
 -  | LANGUAGE SQL  
 -  | [NOT] DETERMINISTIC  
 -  | { CONTAINS SQL | NO SQL | READS SQL DATA | MODIFIES SQL DATA }  
 -  | SQL SECURITY { DEFINER | INVOKER }   
 - routine_body:  
 - Valid SQL routine statement   
 - [begin_label:] BEGIN  
 - [statement_list]  
 - ……  
 - END [end_label] 
 
  
MYSQL 存储过程中的关键语法 
1.声明语句结束符,可以自定义: 
- DELIMITER $$  
 - 或  
 - DELIMITER // 
 
  
2.声明存储过程: 
- CREATE PROCEDURE demo_in_parameter(IN p_in int)  
 
  
3.存储过程开始和结束符号: 
- BEGIN .... END  
 
  
4.变量赋值: 
- SET @p_in=1  
 
  
5.变量定义: 
- DECLARE l_int int unsigned default 4000000;  
 
  
6.创建mysql存储过程、存储函数: 
- create procedure 存储过程名(参数) 
 
  
7.存储过程体: 
- create function 存储函数名(参数) 
 
  
实例 
 
1.创建数据库,备份数据表用于示例操作: 
- mysql> create database db1;  
 - mysql> use db1;   
 - mysql> create table PLAYERS as select * from TENNIS.PLAYERS;  
 - mysql> create table MATCHES as select * from TENNIS.MATCHES; 
 
  
2.下面是存储过程的例子,删除给定球员参加的所有比赛: 
- mysql> delimiter $$#将语句的结束符号从分号;临时改为两个$$(可以是自定义)  
 - mysql> CREATE PROCEDURE delete_matches(IN p_playerno INTEGER)  
 -  -> BEGIN  
 -  -> DELETE FROM MATCHES  
 -  -> WHERE playerno = p_playerno;  
 -  -> END$$  
 - Query OK, 0 rows affected (0.01 sec)  
 - mysql> delimiter;#将语句的结束符号恢复为分号 
 
  
                                                (编辑:52站长网) 
【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! 
                     |