创建和维护存储程序(转)

MySQL存储程序详解
1,创建和维护存储程序语法
1)CREATE PROCEDURE
  1. CREATE PROCEDURE procedure_name ([parameter[,...])   
  2.   [LANGUAGE SQL]   
  3.   [ [NOT] DETERMINISTIC]   
  4.   [ {CONTAINS SQL|MODIFIES SQL DATA|READS SQL DATA|NO SQL} ]   
  5.   [SQL SECURITY {DEFINER|INVOKER}]   
  6.   [COMMENT comment_string]   
  7.   procedure_statements   
  8.   
  9. /* parameters */  
  10. [{IN|OUT|INOUT}] parameter_name datatype  
CREATE PROCEDURE procedure_name ([parameter[,...])
[LANGUAGE SQL]
[ [NOT] DETERMINISTIC]
[ {CONTAINS SQL|MODIFIES SQL DATA|READS SQL DATA|NO SQL} ]
[SQL SECURITY {DEFINER|INVOKER}]
[COMMENT comment_string]
procedure_statements
/* parameters */
[{IN|OUT|INOUT}] parameter_name datatype

2)CREATE FUNCTION
  1. CREATE FUNCTION function_name ([parameter[,...])   
  2.     RETURNS datatype   
  3.     [LANGUAGE SQL]   
  4.     [ [NOT] DETERMINISTIC]   
  5.     [ {CONTAINS SQL|NO SQL|MODIFIES SQL DATA|READS SQL DATA} ]   
  6.     [SQL SECURITY {DEFINER|INVOKER}]   
  7.     [COMMENT comment_string]   
  8.     function_statements  
CREATE FUNCTION function_name ([parameter[,...])
RETURNS datatype
[LANGUAGE SQL]
[ [NOT] DETERMINISTIC]
[ {CONTAINS SQL|NO SQL|MODIFIES SQL DATA|READS SQL DATA} ]
[SQL SECURITY {DEFINER|INVOKER}]
[COMMENT comment_string]
function_statements

3)CREATE TRIGGER
  1. CREATE [DEFINER = {user|CURRENT_USER}] TRIGGER trigger_name   
  2.     {BEFORE|AFTER}   
  3.     {UPDATE|INSERT|DELETE}   
  4.     ON table_name   
  5.     FOR EACH ROW   
  6.     trigger_statements  
CREATE [DEFINER = {user|CURRENT_USER}] TRIGGER trigger_name
{BEFORE|AFTER}
{UPDATE|INSERT|DELETE}
ON table_name
FOR EACH ROW
trigger_statements

4)ALTER PROCEDURE/FUNCTION
  1. ALTER {PROCEDURE|FUNCTION} procedure_or_function_name   
  2.     [SQL SECURITY {DEFINER|INVOKER}]   
  3.     [COMMENT comment_string]  
ALTER {PROCEDURE|FUNCTION} procedure_or_function_name
[SQL SECURITY {DEFINER|INVOKER}]
[COMMENT comment_string]

5)DROP PROCEDURE/FUNCTION/TRIGGER
  1. DROP {PROCEDURE|FUNCTION|TRIGGER} {IF EXISTS} program_name  
DROP {PROCEDURE|FUNCTION|TRIGGER} {IF EXISTS} program_name


2,存储程序的分号问题
MySQL使用分号“;”作为SQL语句的结束,但是存储程序的代码块里面经常也需要用到分号,这样就会导致错误:
  1. mysql > CREATE PROCEDURE HelloWorld()   
  2.      -> BEGIN   
  3.      ->   SELECT 'Hello World';   
  4. ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that   
  5. corresponds to your MySQL server version for the right syntax to use near 'SELECT 'Hello   
  6. World'' at line 3  
  7. mysql >  
mysql > CREATE PROCEDURE HelloWorld()
-> BEGIN
->   SELECT 'Hello World';
ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that
corresponds to your MySQL server version for the right syntax to use near 'SELECT 'Hello
World'' at line 3
mysql >

为了避免此错误,可以使用DELIMITER语句修改分隔符:
  1. mysql > DELIMITER $$   
  2.   
  3. mysql > CREATE PROCEDURE HelloWorld()   
  4.      -> BEGIN   
  5.      ->    SELECT 'Hello World';   
  6.      -> END$$   
  7. Query OK, 0rows affected (0.00 sec)  
mysql > DELIMITER $$
mysql > CREATE PROCEDURE HelloWorld()
-> BEGIN
->    SELECT 'Hello World';
-> END$$
Query OK, 0rows affected (0.00 sec)


3,显示存储程序信息
显示PROCEDURE/FUNCTION STATUS
  1. SHOW {PROCEDURE|FUNCTION} STATUS [LIKE pattern]  
SHOW {PROCEDURE|FUNCTION} STATUS [LIKE pattern]

显示存储过程和存储function信息
  1. select * from information_schema.routtines;  
select * from information_schema.routtines;

显示trigger信息
  1. select * from information_schema.triggers;  
select * from information_schema.triggers;

转载于:https://www.cnblogs.com/gaowen1210/archive/2009/03/31/1426168.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值