MySQL 存储过程和函数

这篇具有很好参考价值的文章主要介绍了MySQL 存储过程和函数。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

目录

一、存储过程和函数概述

二、创建存储过程和函数

1、创建存储过程

2、创建存储函数

三、查看/调用储存过程和函数

1、查看储存过程/函数

2、调用储存过程/函数

四、修改/删除存储过程和函数

1、修改存储过程和函数

2、删除存储过程和函数

五、练习 


一、存储过程和函数概述

存储过程就是一条或多条SQL语句的集合,可视为批文件,但是七作用不仅限于批处理。创建存储过程和函数的语句分别是create proceddure 和 create function。使用CALL语句来调用存储过程,只能输出变量返回值。函数可以从语句外调用(即通过引用函数名),也能返回标量值。存储过程也可以调用其他存储过程。

二、创建存储过程和函数

1、创建存储过程

语法

create procedure 存储过程名称 ([定义存储过程参数列表]) 
begin
body
end 结束符

储存过程参数列表:

[in | out | inout]  参数名 参数类型

in---输入参数

out---输出参数

inout---输入输出参数

例如

mysql> delimiter //
mysql> create procedure avg_age()
    -> begin
    -> select avg(age) as ave_age
    -> from emp3;
    -> end //
Query OK, 0 rows affected (0.00 sec)

mysql> delimiter ;

delimiter //语句的作用是将MySQL的结束符设置为//。MySQL默认的结束符是“;” 。避免冲突。

2、创建存储函数

语法

create function 存储函数名 ([定义存储过程参数列表])
returns 类型
begin
body;
end 结束符

例如

mysql> delimiter //
mysql> create function count_num()
    -> returns int
    -> return (select count(*) from emp3);
    -> //
Query OK, 0 rows affected (0.03 sec)

mysql> delimiter ;

三、查看/调用储存过程和函数

1、查看储存过程/函数

基本语法1

 show [procedure | function] status [like '存储过程名|函数名' \G

基本语法2

 show create [procedure | function] 存储过程名|函数名 \G

 基本语法3

select * from information_schema.Routines where ROUTINE_NAME='存储过程名 | 函数名' \G

例如

基本语法1

mysql> show procedure status like 'avg_age' \G
*************************** 1. row ***************************
                  Db: mydb3
                Name: avg_age
                Type: PROCEDURE
             Definer: root@localhost
            Modified: 2023-08-22 16:22:41
             Created: 2023-08-22 16:22:41
       Security_type: DEFINER
             Comment: 
character_set_client: utf8
collation_connection: utf8_general_ci
  Database Collation: latin1_swedish_ci
1 row in set (0.00 sec)

基本语法2

mysql> show create procedure avg_age \G
*************************** 1. row ***************************
           Procedure: avg_age
            sql_mode: ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION
    Create Procedure: CREATE DEFINER=`root`@`localhost` PROCEDURE `avg_age`()
begin
select avg(age) as ave_age
from emp3;
end
character_set_client: utf8
collation_connection: utf8_general_ci
  Database Collation: latin1_swedish_ci
1 row in set (0.00 sec)

基本语法3

mysql> select * from information_schema.Routines where ROUTINE_NAME='avg_age' \G
*************************** 1. row ***************************
           SPECIFIC_NAME: avg_age
         ROUTINE_CATALOG: def
          ROUTINE_SCHEMA: mydb3
            ROUTINE_NAME: avg_age
            ROUTINE_TYPE: PROCEDURE
               DATA_TYPE: 
CHARACTER_MAXIMUM_LENGTH: NULL
  CHARACTER_OCTET_LENGTH: NULL
       NUMERIC_PRECISION: NULL
           NUMERIC_SCALE: NULL
      DATETIME_PRECISION: NULL
      CHARACTER_SET_NAME: NULL
          COLLATION_NAME: NULL
          DTD_IDENTIFIER: NULL
            ROUTINE_BODY: SQL
      ROUTINE_DEFINITION: begin
select avg(age) as ave_age
from emp3;
end
           EXTERNAL_NAME: NULL
       EXTERNAL_LANGUAGE: NULL
         PARAMETER_STYLE: SQL
        IS_DETERMINISTIC: NO
         SQL_DATA_ACCESS: CONTAINS SQL
                SQL_PATH: NULL
           SECURITY_TYPE: DEFINER
                 CREATED: 2023-08-22 16:22:41
            LAST_ALTERED: 2023-08-22 16:22:41
                SQL_MODE: ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION
         ROUTINE_COMMENT: 
                 DEFINER: root@localhost
    CHARACTER_SET_CLIENT: utf8
    COLLATION_CONNECTION: utf8_general_ci
      DATABASE_COLLATION: latin1_swedish_ci
1 row in set (0.01 sec)

 2、调用储存过程/函数

基本语法

call 存储过程名 (参数);
select 函数名([参数]);

例如

mysql> call avg_age;
+---------+
| ave_age |
+---------+
| 43.9000 |
+---------+
1 row in set (0.00 sec)

四、修改/删除存储过程和函数

1、修改存储过程和函数

基本语法

alter procedure | function  存储过程名 | 函数名 [参数]

例如 

2、删除存储过程和函数

基本语法

drop [procedure | function] [if exists] 存储过程名|函数名

五、练习 

创建表sch并插入数据

字段名

数据类型

主键

外键

非空

唯一

自增

id

INT

name

VARCHAR(50)

glass

VARCHAR(50)

sch 表内容

id

name

glass

1

小明

Glass1

2

小军

Glass2

create table sch ( 
id int primary key, 
name varchar(50) not null, 
glass varchar(50) not null 
)charset=utf8;

insert into sch values
(1,'小明','Glass1'),
(2,'小军','Glass2')
;

mysql> select * from sch;
+----+--------+--------+
| id | name   | glass  |
+----+--------+--------+
|  1 | 小明   | Glass1 |
|  2 | 小军   | Glass2 |
+----+--------+--------+
2 rows in set (0.00 sec)

1、创建一个可以统计表格内记录条数的存储函数 ,函数名为count_sch();

mysql> delimiter $$
mysql> create function count_sch()
    -> returns int 
    -> begin
    -> return (select count(id) from sch)
    -> ;
    -> end$$
mysql> delimiter ;

mysql> select count_sch();
+-------------+
| count_sch() |
+-------------+
|           2 |
+-------------+
1 row in set (0.00 sec)

2、创建一个存储过程record,有1个参数,输入id,功能是输入id输出对应完整信息文章来源地址https://www.toymoban.com/news/detail-668324.html

mysql> delimiter $$
mysql> create procedure record (in id_1 int) 
begin select * from sch where id=id_1; 
end$$
Query OK, 0 rows affected (0.00 sec)

mysql> delimiter ;
mysql> call record(1);
+----+---------+--------+
| id | name    | glass  |
+----+---------+--------+
|  1 | 小明    | glass1 |
+----+---------+--------+
1 row in set (0.00 sec)

到了这里,关于MySQL 存储过程和函数的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 使用MySQL存储过程提高数据库效率和可维护性

    MySQL 存储过程是一种强大的数据库功能,它允许你在数据库中存储和执行一组SQL语句,类似于编程中的函数。存储过程可以大幅提高数据库的性能、安全性和可维护性。本文将详细介绍MySQL存储过程的使用。 MySQL存储过程是一组预编译的SQL语句,它们以一个名称存储在数据库

    2024年02月08日
    浏览(50)
  • Mysql数据库实验报告--实验五 存储过程和触发器

    在这个系列会更新一些最近老师要求写的实验报告~ 大家尽量对着我的文章做一个参考,不要盲目的cv,毕竟这个对于我们以后的工作学习还是十分重要的。 从这个实验开始,就不在cmd命令行里面进行mysql数据库的操作,因为代码长度和代码的复杂性,需使用 MySQL Workbench: 双

    2024年02月09日
    浏览(68)
  • MySQL数据库——存储过程-变量(系统变量、用户定义变量、局部变量)

    目录 系统变量  1.查看系统变量  2.设置系统变量 演示示例 用户定义变量 1.赋值  2.使用 演示示例 局部变量 声明  赋值 演示示例 变量 在MySQL中变量分为三种类型: 系统变量、用户定义变量、局部变量。 系统变量是MySQL服务器提供,不是用户定义的,属于服务器层面。分为全

    2024年02月05日
    浏览(53)
  • MySQL数据库——存储过程-介绍以及基本语法(特点、创建、调用、查看、删除、示例)

    目录 介绍 特点 基本语法 创建 调用 查看 删除  示例  存储过程是 事先经过编译 并 存储在数据库 中的一段 SQL 语句的 集合 ,调用存储过程可以简化应用开发人员的很多工作,减少数据在数据库和应用服务器之间的传输,对于提高数据处理的效率是有好处的。 存储过程思想

    2024年02月06日
    浏览(72)
  • 【Mysql】X-DOC:Mysql数据库大量数据查询加速(定时JOB和存储过程应用案例)

    在某中台系统中,设计了大量的基础数据(维度数据、维度映射关系等)来支撑业务功能,业务表中存在大量的维度外键关联字段,其优点是可以实现前端的选择录入,数据校验,确保录入数据的准确性;缺点是在做业务报表时,需要做大量的维度关联(join)操作。 受限于

    2024年02月12日
    浏览(43)
  • 【MySQL】探索MySQL存储过程的魔力,初学者的数据库编程秘笈(内含实战SQL脚本)

    🧑‍💻作者名称:DaenCode 🎤作者简介:啥技术都喜欢捣鼓捣鼓,喜欢分享技术、经验、生活。 😎人生感悟:尝尽人生百味,方知世间冷暖。 📖所属专栏:重温MySQL MySQL存储过程作为一种服务器端的 数据库编程方式 ,提供了高效、可重用的方法来执行相对复杂的数据库操

    2024年02月15日
    浏览(72)
  • SQL Server判断数据库、表、列、视图、存储过程、函数是否存在

    在写一些业务逻辑相对复杂点的存储过程的时候,经常会用到临时表或者数据表作为临时结果的保存。但每次在作表是否存在的判断时,往往想不起完整的SQL写法。因此,记录一些常用的数据库对象是否存在的判断方法,可以达到快速查找的目的。正是:好记性不如烂笔头。

    2024年02月02日
    浏览(128)
  • MySQL 数据库存储引擎

    目录 一、存储引擎简介 二、MyISAM存储引擎 1、MylSAM介绍 2、MyISAM表支持3种不同的存储格式 3、MylSAM的特点 4、MyISAM使用的生产场景 三、InnoDB存储引擎 1、InnoDB介绍 2、InnoDB的特点 3、InnoDB适用生产场景 4、MyISAM和InnoDB的区别 四、查看和修改存储引擎 1、查看系统支持的存储引擎

    2023年04月25日
    浏览(65)
  • MySQL数据库之存储引擎

    MySQL中的数据用各种不下同的技术存储在文件中,每一种技术都使用不同的存储机制、索引技巧、锁定水平并最终提供不同的功能和能力,这些不同的技术以及配套的功能在MySQL中称为存储引擎。 存储引擎是MySQL将数据存储在文件系统中的存储方式或者存储格式。 存储引擎是

    2024年02月03日
    浏览(57)
  • 【MySQL数据库 | 第十六篇】存储引擎

    目录  前言:  MySQL体系结构图: 存储引擎简介: 1. InnoDB存储引擎: 2. MyISAM存储引擎: 3. MEMORY存储引擎: 4. NDB Cluster存储引擎: 5. ARCHIVE存储引擎: 存储引擎语法: ACID与行级锁:  总结: 经过前面15篇的学习,我们已经学完了SQL的基本语法内容,大致掌握了数据库的操作

    2024年02月08日
    浏览(53)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包