设为首页 加入收藏

TOP

MySQL优化之――自定义存储过程和函数(七)
2015-11-21 01:54:48 来源: 作者: 【 】 浏览:2
Tags:MySQL 优化 定义 存储 过程 函数
information_schema.Routines WHERE ROUTINE_NAME='name_from_t3'
SPECIFIC_NAME  ROUTINE_CATALOG  ROUTINE_SCHEMA  ROUTINE_NAME  ROUTINE_TYPE  DATA_TYPE  CHARACTER_MAXIMUM_LENGTH  CHARACTER_OCTET_LENGTH  NUMERIC_PRECISION  NUMERIC_SCALE  CHARACTER_SET_NAME  COLLATION_NAME   DTD_IDENTIFIER  ROUTINE_BODY  ROUTINE_DEFINITION                              EXTERNAL_NAME  EXTERNAL_LANGUAGE  PARAMETER_STYLE  IS_DETERMINISTIC  SQL_DATA_ACCESS  SQL_PATH  SECURITY_TYPE  CREATED              LAST_ALTERED         SQL_MODE  ROUTINE_COMMENT  DEFINER         CHARACTER_SET_CLIENT  COLLATION_CONNECTION  DATABASE_COLLATION
-------------  ---------------  --------------  ------------  ------------  ---------  ------------------------  ----------------------  -----------------  -------------  ------------------  ---------------  --------------  ------------  ----------------------------------------------  -------------  -----------------  ---------------  ----------------  ---------------  --------  -------------  -------------------  -------------------  --------  ---------------  --------------  --------------------  --------------------  ------------------
name_from_t3   def              school          name_from_t3  FUNCTION      char                             80                     240             (NULL)         (NULL)  utf8                utf8_general_ci  char(80)        SQL           RETURN (SELECT  NAME  FROM  t3  WHERE  id=id )  (NULL)         (NULL)             SQL              NO                CONTAINS SQL     (NULL)    DEFINER        2014-06-21 18:52:39  2014-06-21 18:52:39                             root@localhost  utf8                  utf8_general_ci       utf8_general_ci   

查询结果显示name_from_t3的详细信息。

?

注意:在information_schema数据库下的Routines表中,存储着所有存储过程和函数的定义。

如果使用SELECT语句查询Routines表中的存储过程和函数的定义时,一定要使用ROUTINE_NAME字段指定存储过程或函数的名称。

否则,将查询出所有的存储过程或函数的定义。


修改存储过程和函数

修改存储过程和函数是指修改已经定义好的存储过程和函数。

MySQL中通过ALTER PROCEDURE语句来修改存储过程。

通过ALTER FUNCTION语句来修改存储函数。

MySQL中修改存储过程和函数的语句的语法形式如下:

ALTER {PROCEDURE | FUNCTION} sp_name [characteristic ...]  
characteristic:  
{ CONTAINS SQL | NO SQL | READS SQL DATA | MODIFIES SQL DATA }  
| SQL SECURITY { DEFINER | INVOKER }  
| COMMENT 'string' 

其中,sp_name参数表示存储过程或函数的名称;

characteristic参数指定存储函数的特性。

CONTAINS SQL表示子程序包含SQL语句,但不包含读或写数据的语句;

NO SQL表示子程序中不包含SQL语句;

READS SQL DATA表示子程序中包含读数据的语句;

MODIFIES SQL DATA表示子程序中包含写数据的语句。

SQL SECURITY { DEFINER | INVOKER }指明谁有权限来执行。

DEFINER表示只有定义者自己才能够执行;

INVOKER表示调用者可以执行。

COMMENT 'string'是注释信息。

说明:修改存储过程使用ALTER PROCEDURE语句,修改存储函数使用ALTER FUNCTION语句。

但是,这两个语句的结构是一样的,语句中的所有参赛都是一样的。

而且,它们与创建存储过程或函数的语句中的参数也是基本一样的。

?

修改存储过程和函数,只能修改他们的权限,目前MYSQL还不提供对已存在的存储过程和函数代码的修改

如果要修改,只能通过先DROP掉,然后重新建立新的存储过程和函数来实现

在SQLYOG里选中选中函数,然后右键ALTER FUNCTION的时候,也是这样,先DROP掉,然后重新建立新的函数来实现

\

DELIMITER $$
DROP FUNCTION IF EXISTS `name_from_t3`$$

CREATE DEFINER=`root`@`localhost` FUNCTION `name_from_t3`(id INT ) RETURNS CHAR(80) CHARSET utf8
RETURN (SELECT  NAME  FROM  t3  WHERE  id=id )$$

DELIMITER ;

?


删除存储过程和函数

删除存储过程和函数指删除数据库中已经存在的存储过程和函数。

MySQL中使用DROP PROCEDURE语句来删除存储过程。通过DROP FUNCTION语句来删除存储函数。

DROP { PROCEDURE| FUNCTION } sp_name; 

其中,sp_name参数表示存储过程或函数的名称

下面删除存储过程Proc和存储函数name_from_t3。删除存储过程的代码如下:

DROP  PROCEDURE  Proc; 

删除存储函数name_from_employee的代码如下:

DROP  FUNCTION  name_from_t3; 

删除完毕之后,查询information_schema.Routines来确认上面的删除是否成功

SELECT * FROM information_schema.Routines
WHERE ROUTINE_NAME='proc' OR ROUTINE_NAME='name_from_t3';  

总结

TIPS:

存储过程里面是可以调用其他存储过程的,使用CALL语句调用其他存储过程就可以了

存储过程参数列表里的参数名尽量不要和数据库中表的字段名一样,否则有可能出错

存储过程的参数可以使用中文,在定义存储过程的时候加上character set gbk就可以了

首页 上一页 4 5 6 7 下一页 尾页 7/7/7
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇MySQL查询结果为乱码 下一篇MySQL之――CentOS下以RPM方式安..

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容: