当前位置: 首页 > news >正文

存储过程(SQL)

1.存储过程

存储过程(Stored Procedure)是一组为了完成特定功能的SQL语句集,经编译后存储在数据库中,用户通过指定存储过程的名字并给定参数(如果该存储过程带有参数)来调用执行它。

2.MySQL存储过程创建
1.语法
#创建存储过程 CREATE PROCEDURE 存储过程名 ([[IN|OUT|INOUT]] 参数名 数据类型) 过程体; #删除存储过程 DROP PROCEDURE IF EXISTS 存储过程名; #删除存储过程 DROP PROCEDURE IF EXISTS adduser; #创建存储过程 CREATE PROCEDURE adduser(num DOUBLE) BEGIN UPDATE `user` SET money = money - num WHERE name = '张三'; UPDATE `user` SET money = money + num WHERE name = '李四'; END;
2.过程体
BEGIN 过程体 END; 过程体每条SQL语句用';'隔开
3.参数

IN:

不管存储过程里面的参数怎么改变,都不影响外部变量。
OUT:

不管参数传入之前的定义是什么,在存储过程中都为null。
存储过程里面对参数的改变,都会影响外部变量。
INOUT:

参数在外部定义后,会将定义的变量传入。

存储过程里面对参数改变,都会影响外部的变量。

#IN0 CREATE PROCEDURE add2(IN num INT(20)) BEGIN SET num = 111; SELECT num; END; SET @a = 123; CALL add2(@a); SELECT @a;

#OUT CREATE PROCEDURE add3(OUT num INT(20)) BEGIN SELECT num; SET num = 111; END; SET @a = 123; CALL add3(@a); SELECT @a;

#INOUT CREATE PROCEDURE add3(INOUT num INT(20)) BEGIN SELECT num; SET num = 111; SELECT num; END; SET @a = 123; CALL add3(@a); SELECT @a;

4.变量

使用 DECLARE 定义变量(只能在存储过程、函数或触发器中使用)。

变量赋值:

1.使用 DEFAULT 默认赋值。

2.使用 SET 赋值。

3.使用 SELECT…INTO… 赋值。

DROP PROCEDURE IF EXISTS add1; CREATE PROCEDURE add1() BEGIN #默认值 DECLARE a INT(20) DEFAULT 1; DECLARE b INT(20); DECLARE c VARCHAR(255); #使用set为变量赋值 SET b = 2; SELECT a; SELECT b; #使用SELECT...INTO...为变量赋值 SELECT name INTO c FROM user WHERE id = 1; SELECT c; END; CALL add1();

用户变量:

用于在 SQL 语句和存储过程之间传递数据。

用法:

@变量名

在使用用户变量之前,最好先初始化它,否则它的值将是 null。

变量作用域:

内部变量在其作用域范围内享有更高的优先权,当执行到end时,内部变量消失,不再可见了,在存储过程外再也找不到这个内部变量,但是可以通过out参数或者将其值指派给会话变量来保存其值。

5.调用存储过程
CALL 存储过程名;
6.分隔符

MySQL默认以";"为分隔符,如果没有声明分割符,则编译器会把存储过程当成SQL语句进行处理,因此编译过程会报错。所以要事先用 “DELIMITER //” 声明当前段分隔符,让编译器把两个 “//” 之间的内容当做存储过程的代码,不会执行这些代码。“DELIMITER ;” 的意为把分隔符还原。

3.MySQL存储过程的控制语句
1.条件语句

IF-THEN-ELSE语句:

IF 条件 THEN SQL语句; END IF; CREATE PROCEDURE methods() BEGIN DECLARE a INT; SET a = 1; IF a = 1 THEN SELECT a; END IF; END; CALL methods();

CASE-WHEN-THEN-ELSE语句:

CASE 变量名 WHEN 值1 THEN SQL语句; WHEN 值2 THEN SQL语句; ELSE SQL语句; END CASE; CREATE PROCEDURE methods() BEGIN DECLARE a INT; SET a = 1; CASE a WHEN 0 THEN SELECT '0',a; WHEN 1 THEN SELECT '1',a; ELSE SELECT '---',a; END CASE; END; CALL methods();
2.循环语句

WHILE-DO…END-WHILE语句:

WHILE 条件 DO SQL语句; END WHILE; CREATE PROCEDURE methods() BEGIN DECLARE a INT DEFAULT 0; WHILE a<5 DO INSERT INTO user (name,money) VALUES ('李明',1000); SET a=a+1; END WHILE; END; CALL methods();
http://www.jsqmd.com/news/458313/

相关文章:

  • openclaw 常用命令
  • 【Linux】深入浅出 Linux 自动化构建:make 与 Makefile 的实用指南
  • C语言进阶指南(类型转换、整型提升)
  • 显卡(Graphics Processing Unit,GPU)架构详细解读
  • 学生成绩管理系统(MySQL)
  • 基于Spring Cloud的电商系统设计与实现——用户与商品模块的研究(下)
  • 完美解决org.mybatis.spring.MyBatisSystemException nested exception is org.apache.ibatis.reflection.Refl
  • 【C语言-第33章 标准输入输出】-002篇
  • 深度解析 Android 开发(影像类 APP 方向)职位:技术全景、面试指南与职业进阶
  • 最新SQL Server 2022保姆级安装教程【附安装包】
  • 【C语言-第34章 字符与字符串的输入输出】-001篇
  • Flutter 组件 genkit 的适配 鸿蒙Harmony 实战 - 驾驭大模型开发套件、实现鸿蒙端 AI 智能流式响应与提示词工程自动化方案
  • Epson M-G366PDG惯性测量单元:精准导航与卓越性能的理想选择
  • 福尔蒂技服团队驻厂年支持1860+工时,一次性良品率达99.27%
  • 基于Java+SSM+Django小工程预算系统(源码+LW+调试文档+讲解等)/小型工程预算软件/小型工程项目预算工具/简易工程预算系统/工程预算软件小型版/小型工程成本估算系统
  • 给SQL server数据库表字段添加注释SQL,附修改、删除注释SQL及演示
  • 最容易上手的AI找谁
  • 为什么你需要OpenClaw?从单Agent到多Agent的进化之路
  • 5 模型评估方法:准确率与混淆矩阵的实战解读
  • ISO9071外的质控实践:福尔蒂研发-QA-中试‘铁三角’机制(含架构与甘特图)
  • 最新最详细的配置Node.js环境教程
  • 私有化部署DeepSeek并SpringBoot集成使用(附UI界面使用教程-支持语音、图片)
  • flask-django基于python的疫苗发布和接种管理系统的设计与实现
  • 以引擎源码抄写+UE独立游戏相结合
  • 简易星露谷模组二次开发之旅:捐赠追踪、颜色优化与动物状态警告
  • 【2025最新】基于SpringBoot+Vue的船舶维保管理系统管理系统源码+MyBatis+MySQL
  • ros1科学安装方法
  • 行星减速器装配图CAD图纸
  • 超详细:数据库的基本架构
  • 禁止使用存储过程