MySQL_基础_存储过程和函数

存储过程和函数

含义:一组预先编译好的SQL语句的集合,理解成批处理语句
    1、提高代码的重用性
    2、简化操作
    3、减少了编译次数并且减少了和数据库服务器的连接次数,提高了效率

区别:
    存储过程:可以有0个返回,也可以有多个返回,适合做批量插入、批量更新
    存储函数:有且仅有1个返回,适合做处理数据后返回一个结果

存储过程

语法

创建过程
语法:
    CREATE PROCEDURE 存储过程名(参数列表)
    BEGIN

        存储过程体(一组合法的SQL语句)
    END

说明:
    1、参数列表包含三部分
    参数模式  参数名  参数类型
    举例:
        IN name VARCHAR(20)

    参数模式:
        IN:输入参数
        OUT:输出参数
        INOUT:输入输出参数

    2、存储过程体中仅有一句话,则可以省略BEGIN END
    3、存储过程体中的每条sql语句的结尾要求必须加分号
    4、存储过程的结尾可以使用 DELIMITER 设置结束标记
    语法:
        DELIMITER 结束标记
    举例:
        DELIMITER $

调用过程
语法:
    CALL 存储过程名(实参列表);

说明:
    调用IN模式参数:
        CALL 存储过程名(@变量);

    调用OUT模式参数:
        SET @变量;
        CALL 存储过程名(@变量);
        SELECT @变量;

    调用INOUT模式参数:
        SET @变量=值;
        CALL 存储过程名(@变量);
        SELECT @变量;

查看过程
语法:
    SHOW CREATE PROCEDURE 存储过程名;

删除过程
语法:
    DROP PROCEDURE 存储过程名;

案例

1、创建带IN模式参数的存储过程
# 设置结束标记
DELIMITER $

# 创建
CREATE PROCEDURE pro1(IN username VARCHAR(20), IN password VARCHAR(20))
BEGIN

    DECLARE result INT DEFAULT 0;            # 声明并初始化

    SELECT COUNT(*) INTO result              # 赋值
    FROM `user` u WHERE u.username = username
    AND u.password = password;

    SELECT IF(result>0,‘登录成功‘,‘登录失败‘);  # 使用

END $

# 调用
CALL pro1(‘admin‘, ‘admin‘)$

2、创建带OUT模式参数的存储过程
# 设置结束标记
DELIMITER $

# 创建
CREATE PROCEDURE pro2(IN id INT, OUT username VARCHAR(20), OUT password VARCHAR(20))
BEGIN

    SELECT u.username,u.password INTO username,password
    FROM `user` u WHERE u.id = id;

END $

# 调用
CALL pro2(1001, @username, @password)$
SELECT @username,@password$

3、创建带INOUT模式参数的存储过程
# 设置结束标记
DELIMITER $

# 创建
CREATE PROCEDURE pro3(INOUT a INT ,INOUT b INT)
BEGIN
    SET a = a*2;
    SET b = b*2;
END $

#调用
SET @m=10$
SET @n=20$
CALL pro3(@m,@n)$
SELECT @m,@n$

存储函数

语法

创建函数
语法:
    CREATE FUNCTION 函数名(参数列表) RETURNS 返回类型
    BEGIN
        函数体
    END

说明:
    1、参数列表包含两部分
    参数名 参数类型

    2、函数体必须有RETURN语句,如果没有会报错
    3、函数体中仅有一句话,则可以省略BEGIN END
    4、函数体中的每条sql语句的结尾要求必须加分号
    5、函数的结尾可以使用 DELIMITER 设置结束标记
    语法:
        DELIMITER 结束标记
    举例:
        DELIMITER $

调用函数
语法:
    SELECT 函数名(参数列表)

查看函数
语法:
    SHOW CREATE FUNCTION 函数名;

删除函数
语法:
    DROP FUNCTION 函数名;

案例

1、无参返回
# 设置结束标记
DELIMITER $

# 创建
CREATE FUNCTION fun1() RETURNS INT
BEGIN
    DECLARE c INT DEFAULT 0;
    SELECT COUNT(*) INTO c
    FROM `user`;
    RETURN c;
END $

#调用
SELECT fun1()$

2、有参返回
# 设置结束标记
DELIMITER $

# 创建
CREATE FUNCTION fun2(username VARCHAR(20)) RETURNS VARCHAR(20)
BEGIN
    SET @password=‘123‘;
    SELECT u.password INTO @password
    FROM `user` u WHERE u.username = username;
    RETURN @password;
END $

#调用
SELECT fun2(‘admin‘)$

原文地址:https://www.cnblogs.com/Small-music/p/9324216.html

时间: 2024-08-07 10:52:11

MySQL_基础_存储过程和函数的相关文章

Oracle数据库基础--存储过程和函数

一.存储过程和函数 存储过程: 对一个模块的封装 函数: 功能与存储过程几乎一样 区别: 函数必须通过return 关键字返回一个值 存储过程: 不需要return返回值 参数: 输入型参数 输出型参数 输入(输出)型参数 什么时候用存储过程, 什么时候用函数 一般来讲, 当只有一个返回值的时候用函数, 当没有返回值或者需要多个返回值的时候, 用存储过程 二.首先看一下SQL基础 先看要举例的表的内容: 下面开始操作: 首先建一个新的SQL Window: DECLARE --声明变量 /* 引

Java中执行存储过程和函数(web基础学习笔记十四)

一.概述 如果想要执行存储过程,我们应该使用 CallableStatement 接口. CallableStatement 接口继承自PreparedStatement 接口.所以CallableStatement 接口包含有Statement 接口和PreparedStatement 接口定义的全部方法,但是并不是所有的方法我们都要使用,主要使用的方法有这样几个: CallableStatement 常用方法: 返回类型 方法签名 说明 boolean execute() 执行 SQL 语句

【SQL server基础】SQL存储过程和函数的区别

本质上没区别.只是函数有如:只能返回一个变量的限制.而存储过程可以返回多个.而函数是可以嵌入在sql中使用的,可以在select中调用,而存储过程不行.执行的本质都一样.      函数限制比较多,比如不能用临时表,只能用表变量.还有一些函数都不可用等等.而存储过程的限制相对就比较少       1.    一般来说,存储过程实现的功能要复杂一点,而函数的实现的功能针对性比较强.       2.    对于存储过程来说可以返回参数,而函数只能返回值或者表对象.       3.    存储过程

mysql基础教程(四)-----事务、视图、存储过程和函数、流程控制

事务 概念 事务由单独单元的一个或多个SQL语句组成,在这 个单元中,每个MySQL语句是相互依赖的.而整个单独单 元作为一个不可分割的整体,如果单元中某条SQL语句一 旦执行失败或产生错误,整个单元将会回滚.所有受到影 响的数据将返回到事物开始以前的状态:如果单元中的所 有SQL语句均执行成功,则事物被顺利执行. 存储引擎 概念 在mysql中的数据用各种不同的技术存储 在文件(或内存)中. 查看 通过 show engines: 来查看mysql支持的存储引擎. 常见引擎 在mysql中用的

Sql Server存储过程和函数浅谈

今天给大家总结一下sql server中的存储过程和函数.本人是小白,里面内容比较初级,大神不喜勿喷 自行飘过就是.. 首先给大家简单列出sql server中的流控制语句,后面会用到的^_^ sql server常用控制语句 1.begin..end语句:该语句用来定义一串由顺序执行的SQL语句构成的块. begin statement block end 2.if....else语句:该语句用来定义有条件执行的某些语句. if boolen_expression statement [els

我的MYSQL学习心得(十) 自定义存储过程和函数

我的MYSQL学习心得(一) 简单语法 我的MYSQL学习心得(二) 数据类型宽度 我的MYSQL学习心得(三) 查看字段长度 我的MYSQL学习心得(四) 数据类型 我的MYSQL学习心得(五) 运算符 我的MYSQL学习心得(六) 函数 我的MYSQL学习心得(七) 查询 我的MYSQL学习心得(八) 插入 更新 删除 我的MYSQL学习心得(九) 索引 我的MYSQL学习心得(十一) 视图 我的MYSQL学习心得(十二) 触发器 我的MYSQL学习心得(十三) 权限管理 我的MYSQL学习

SQL Server 2008空间数据应用系列四:基础空间对象与函数应用

原文:SQL Server 2008空间数据应用系列四:基础空间对象与函数应用 友情提示,您阅读本篇博文的先决条件如下: 1.本文示例基于Microsoft SQL Server 2008 R2调测. 2.具备 Transact-SQL 编程经验和使用 SQL Server Management Studio 的经验. 3.熟悉或了解Microsoft SQL Server 2008中的空间数据类型. 4.具备相应(比如OGC)的GIS专业理论知识. 5.其他相关知识. SQL Server 2

oracle 存储过程,存储函数,包,

http://heisetoufa.iteye.com/blog/366957 认识存储过程和函数 存储过程和函数也是一种PL/SQL块,是存入数据库的PL/SQL块.但存储过程和函数不同于已经介绍过的PL/SQL程序,我们通常把PL/SQL程序称为无名块,而存储过程和函数是以命名的方式存储于数据库中的.和PL/SQL程序相比,存储过程有很多优点,具体归纳如下: * 存储过程和函数以命名的数据库对象形式存储于数据库当中.存储在数据库中的优点是很明显的,因为代码不保存在本地,用户可以在任何客户机上

memcached完全剖析--1. memcached的基础 _转

2008-07-10 memcached完全剖析--1. memcached的基础 翻译一篇技术评论社的文章,是讲memcached的连载.fcicq同学说这个东西很有用,希望大家喜欢. 发表日:2008/7/2 作者:长野雅广(Masahiro Nagano) 原文链接:http://gihyo.jp/dev/feature/01/memcached/0001 我是mixi株式会社开发部系统运营组的长野. 日常负责程序的运营.从今天开始,将分几次针对最近在Web应用的可扩展性领域 的热门话题m