mysql存储过程和函数(一)

Wesley13
• 阅读 508

  存储过程和函数是事先经过编译并存储在数据库的一段sql语句集合,调用存储过程和函数可以简化应用程序开发人员的很多工作,减少数据在数据库和应用服务器之间的传输,对提高数据运行效率是有好处的。

  存储过程和函数的区别在于函数必须有返回值,而存储过程却没有,存储过程的参数可以使用IN,OUT,INOUT类型,而函数的参数只能使用IN类型,

  在对存储过程或者函数进行操作时,需要先判断用户是否有相应的权限,例如,创建存储过程或者函数需要 CREATE ROUTINE 权限,修改或者删除存储过程或者函数需要 ALTER ROUTINE 权限,执行存储过程或者函数则需要EXECUTE权限。

  创建 存储过程语法:

CREATE PROCEDURE findUser (IN p_u_id INT)
BEGIN
    SELECT
          id,username,phone
    FROM
        mmall_user
    WHERE
        id = p_u_id;
END;

  调用存储过程的语法:

CALL findUser (23) ;

  在执行存储存储过程或者函数之前,可以通过“DELIMITER $$” 命令将语句的结束符从“;”修改成其他符号 , 这里是用的是$$  ,这样在过程或者函数中的;就不会被mysql解释成语句的结束而提示错误,在存储过程或者函数结束后,要通过“DELIMITER ;” 命令再将结束符该回成“;”

  在数据库调用存储过程和直接执行sql的结果是相同的,但是存储过程的好处在于处理逻辑都封装在数据库端,调用者不需要了解中间的处理逻辑,一旦处理逻辑发生变化,只需要修改存储过程就可以。而对调用者的程序完全没有影响。

  删除存储过程或者函数:

  一次只可以删除一个存储过程或者函数,删除存储过程或者函数需要有该过程或者函数的“ALTER ROUTINE”权限。

DROP {PROCEDURE/FUNCTION} IF EXISTS findUser; #判断是否存在同名的存储过程,删除

  查看存储过程或者权限:

  1.查看存储过程或者函数的状态

SHOW {PROCEDURE/FUNCTION} STATUS [LIKE 'pattern']

  2.查看存储过程或者函数的定义

SHOW CREATE {PROCEDURE/FUNCTION} sp_name

  3.通过查看 information_schema.Routines 了解存储过程和函数的信息

SELECT
    *
FROM
    information_schema.Routines
WHERE
    ROUTINE_NAME = sp_name;

  变量的使用:

  1.变量的定义:通过DECLARE可以定义一个局部变量,该变量的作用范围只能在BEGIN...END块中,可以用在嵌套的块中。变量的定义必须写在复合语句定义的开头,并且在任何其他语句的前面,可以一次声明多个同类型的变量。如果需要,可以使用DEFAULT赋默认值。

  定义变量的语法:

DECLARE var_name  [...] type [DEFAULT value]

  例:

CREATE FUNCTION get_username(productId int ,p_create_time DATETIME)
RETURNS DECIMAL(10,2)
DETERMINISTIC
READS SQL DATA 
BEGIN
DECLARE varPay DECIMAL(10,2) ;
select IFNULL(sum(price),0) INTO varPay from mmall_product where create_time<=p_create_time
and id = productId;
RETURN varPay;
END;

  查看所有变量:

show session variables;
点赞
收藏
评论区
推荐文章
皕杰报表之UUID
​在我们用皕杰报表工具设计填报报表时,如何在新增行里自动增加id呢?能新增整数排序id吗?目前可以在新增行里自动增加id,但只能用uuid函数增加UUID编码,不能新增整数排序id。uuid函数说明:获取一个UUID,可以在填报表中用来创建数据ID语法:uuid()或uuid(sep)参数说明:sep布尔值,生成的uuid中是否包含分隔符'',缺省为
Wesley13 Wesley13
3年前
MySQL数据库表设计规范
一、数据库设计1、一般都使用INNODB存储引擎,除非读写比率<1%,才考虑使用MYISAM存储引擎;其他存储引擎请在DBA的建议下使用。2、Storedprocedure(包括存储过程,函数,触发器)对于MYSQL来说还不是很成熟,没有完善的出错记录处理,不建议使用。3、UUID(),USER()这样的
Wesley13 Wesley13
3年前
MySQL管理与优化(9):存储过程和函数
存储过程和函数存储过程和函数是事先经过编译并存储在数据库中的一段SQL语句的集合。存储过程或函数的相关操作创建,修改存储过程或函数相关语法CREATEDEFINER{user|CURRENT_USER}PROCE
Wesley13 Wesley13
3年前
mysql——定义——存储过程和函数——概念
存储过程和函数是指将经常使用的一组SQL语句组合在一起,并将这些SQL语句当作一个整体存储在服务器中一、创建存储过程语法格式:createproceduresp_name(proc_parameter……)ch
Wesley13 Wesley13
3年前
mysql存储过程和自定义函数
存储过程简介SQL语句需要先编辑后执行,而存储过程是一组为了完成特定功能的SQL语句集,经编译后存储过程在数据库中,用户通过制定存储过程的名字并传给参数来调用它。存储过程是可编程的函数,在数据库中创建并保持,可以由SQL和控制结构组成。档想要在不同的应用平台上执行相同的函数,或者封装特定功能时,存储过程是非常有用的,数据库中的存储过程可以看错
Stella981 Stella981
3年前
SQL Server数据库基础知识——存储过程
SQLServer数据库基础知识存储过程概述什么是存储过程?存储过程的种类如何创建、修改、删除、调用存储过程?存储过程的优缺点存储过程和触发器的区别?存储过程和函数的区别?
Easter79 Easter79
3年前
SQL Server数据库基础知识——存储过程
SQLServer数据库基础知识存储过程概述什么是存储过程?存储过程的种类如何创建、修改、删除、调用存储过程?存储过程的优缺点存储过程和触发器的区别?存储过程和函数的区别?
Wesley13 Wesley13
3年前
Mysql存储过程
SQL语句需要先编译然后执行,而存储过程(StoredProcedure)是一组为了完成特定功能的SQL语句集,经编译后存储在数据库中,用户通过指定存储过程的名字并给定参数(如果该存储过程带有参数)来调用执行它。存储过程是可编程的函数,在数据库中创建并保存,可以由SQL语句和控制结构组成。当想要在不同的应用程序或平台上执行相同的函数,或者封装特定功能时
Wesley13 Wesley13
3年前
Oracle存储过程
1、定义所谓存储过程(StoredProcedure),就是一组用于完成特定数据库功能的SQL语句集,该SQL语句集经过编译后存储在数据库系统中。在使用时候,用户通过指定已经定义的存储过程名字并给出相应的存储过程参数来调用并执行它,从而完成一个或一系列的数据库操作。2、存储过程的创建Oracle存储过程包含三部分
LeeFJ LeeFJ
1年前
Foxnic-SQL (9) —— DAO 特性 : 执行存储过程与函数
FoxnicQSL对函数与存储过程的调用做了简化,使调用过程尽量简洁。虽然现在新构建的应用越来越不提倡使用数据库存储过程与函数,但是它们还是非常广泛地被使用着。任何技术的使用,一是看场景,而是看使用者,存储过程和函数不应被抛弃。