mysql笔记:17. 数据库编程

文章目录

  • 一、存储过程
    • [1. 创建存储过程](#1. 创建存储过程)
    • [2. 查看存储过程](#2. 查看存储过程)
    • [3. 调用存储过程](#3. 调用存储过程)
    • [4. 修改存储过程](#4. 修改存储过程)
    • [5. 删除存储过程](#5. 删除存储过程)
  • 二、函数
    • [1. 创建自定义函数](#1. 创建自定义函数)
    • [2. 查看自定义函数](#2. 查看自定义函数)
    • [3. 调用自定义函数](#3. 调用自定义函数)
    • [4. 删除自定义函数](#4. 删除自定义函数)

为了提高SQL语句的重用性,MySQL可以将频繁使用的业务逻辑封装成程序进行存储,这类程序包括存储过程、函数、触发器等。

一、存储过程

存储过程是一组可以完成特定功能的SQL语句集合,它可以将常用或复杂操作封装成一个代码块存储在数据库服务器中,以便重复使用,大大减少数据库开发人员的工作量。

1. 创建存储过程

基本语法:

SQL 复制代码
CREATE PROCEDURE pro_name([[IN | OUT | INOUT ] 参数名称 参数类型]) [characteristic ... ] routine_body

MySQL默认的语句结束符号为分号(;),而在创建存储过程时,存储过程体可能包含多条SQL语句,所以为避免分号与存储过程中SQL语句的结束符相冲突,需要使用DELIMITER改变存储过程的结束符。存储过程定义完毕后再恢复默认结束符。

SQL 复制代码
mysql> DELIMITER //

2. 查看存储过程

存储过程创建之后,可以使用SHOW PROCEDURE STATUS语句和SHOW CREATE PROCEDURE语句分别显示存储过程的状态信息和创建信息,也可以在数据库information_schema的Routines数据表中查询。

SQL 复制代码
mysql> SHOW PROCEDURE STATUS [LIKE 'pattern'];
mysql> SHOW CREATE PROCEDURE pro_name;

3. 调用存储过程

基本语法:

SQL 复制代码
mysql> CALL [dbname.]pro_name([实参列表]);

4. 修改存储过程

基本语法:

SQL 复制代码
mysql> ALTER PROCEDURE pro_name[characteristic ... ];

只能修改存储过程的特征值,不能修改存储过程的参数

5. 删除存储过程

基本语法:

SQL 复制代码
mysql> DROP PROCEDURE [IF EXISTS] pro_name;

二、函数

MySQL支持函数的使用,其中的函数分为两种:内置函数、自定义函数。自定义函数和内置函数性质相同,都用于实现某种功能。

1. 创建自定义函数

自定义函数和存储过程类似,都是存储在数据库中的一段SQL语句集合;区别在于存储过程没有直接返回值,主要用于执行操作,而自定义函数可以通过RETURN语句返回数据。创建自定义函数的基本语法:

SQL 复制代码
CREATE FUNCTION func_name([func_parameter[...]]) RETURNS type [characteristic ... ] Routine_body

2. 查看自定义函数

自定义函数创建之后,可以使用SHOW FUNCTION STATUS语句和SHOW CREATE FUNCTION语句分别显示存储过程的状态信息和创建信息,也可以在数据库information_schema的Routines数据表中查询。

SQL 复制代码
mysql> SHOW FUNCTION STATUS [LIKE 'pattern'];
mysql> SHOW CREATE FUNCTION func_name;

从语法来看,查看存储过程和自定义函数相似,只是使用的关键字不同。

3. 调用自定义函数

自定义函数的调用和MySQL内置函数的调用类似,基本语法:

SQL 复制代码
mysql> SELECT func_name(parameters) [, func_name(parameters) ... ];

4. 删除自定义函数

SQL 复制代码
mysql> DROP FUNCTION [IF EXISTS] func_name;
相关推荐
木木子222 小时前
# 密码强度检测深度解析:正则表达式实时分析、多维度评分算法与可视化反馈
mysql·算法·华为·正则表达式·harmonyos
阿成学长_Cain6 小时前
Linux ipcs 命令超全详解:查看共享内存 / 消息队列 / 信号量,IPC 运维必备
linux·运维·服务器·网络·数据库
一嘴一个橘子8 小时前
mysql 创建表
mysql
OceanBase数据库官方博客8 小时前
OceanBase AI 时代,数据库的变与不变(技术解析与实践)
数据库·人工智能·oceanbase
阿成学长_Cain10 小时前
Linux dirs命令详解|Bash目录堆栈管理快速切换目录实战教程
linux·运维·前端·数据库
ywl47081208710 小时前
Mysql 平衡二叉树、红黑树、B树、B+树区别以及应用场景(五)
数据库·b树·mysql
IvorySQL11 小时前
IvorySQL Agent 探索与实践
数据库·人工智能·postgresql·oracle·ivorysql
作陪11 小时前
小白也能看懂的 SQL 零基础教程:从关系模型到事务全解
mysql
SelectDB12 小时前
美团数十 PB 规模 Apache Doris 实践:从统一 OLAP 到 AI-Native 数据基座
大数据·数据库·性能优化
Database_Cool_12 小时前
阿里云RDS主从延迟解决方案_只读实例半同步复制最佳实践
数据库·人工智能