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

数据库--存储过程

数据库–存储过程

文章目录

  • 数据库--存储过程
    • 1.存储过程简介
    • 2.MySQL 存储过程概述
    • 3.MySQL 存储过程的创建
    • 4.MySQL 存储过程的调用
    • 5.MySQL 存储过程的删除
    • 6.MySQL 存储过程的控制语句
      • 6.1变量作用域
      • 6.2条件语句
      • 6.3循环语句
    • 7.MySQL 存储过程常用函数
      • 7.1字符串函数:
      • 7.2数学函数
      • 7.3日期时间函数

1.存储过程简介

  • 存储过程是一组为了完成特定功能的 SQL 语句集,经编译后存储在数据库中。

  • 用户通过指定存储过程的名字并给定参数来调用执行。

  • 存储过程可视为对编程中面向对象方法的模拟,允许控制数据的访问方式。

  • 优点:

    • 增强SQL语言的功能和灵活性:支持控制语句,完成复杂判断与运算。

    • 标准组件式编程:可多次调用,修改存储过程不影响应用程序源代码。

    • 较快的执行速度:预编译优化,执行计划存储在系统表中。

    • 减少网络流量:只需传送调用语句,降低网络负载。

    • 安全机制:通过权限限制实现对数据的访问控制。

2.MySQL 存储过程概述

  • MySQL 5.0 开始支持存储过程。
  • 提高了数据库编程的灵活性。

3.MySQL 存储过程的创建

  • 语法:
CREATE PROCEDURE 过程名([[IN|OUT|INOUT] 参数名 数据类型, ...]) [特性 ...] 过程体
  • 分隔符:

    • 默认分隔符为 ;,需使用 DELIMITER // 声明新分隔符,结束后再恢复为 ;
  • 参数类型:

    • IN:输入参数,必须在调用时指定,修改不影响外部。

    • OUT:输出参数,可在存储过程内部修改并返回。

    • INOUT:输入输出参数,调用时指定,可修改并返回。

  • 过程体:

    • 使用 BEGINEND 标识开始与结束。
  • 变量声明:

DECLARE 变量名1[, 变量名2...] 数据类型 [默认值];
  • 变量赋值:
SET 变量名 = 变量值;
  • 用户变量:

    • @ 开头,滥用会导致程序难以理解。
  • 注释:

    • 支持 -- 单行注释。

4.MySQL 存储过程的调用

CALL 过程名(参数);

5.MySQL 存储过程的删除

DROP PROCEDURE [过程1[, 过程2...]];

6.MySQL 存储过程的控制语句

6.1变量作用域

  • 内部变量在作用域内优先,执行到 END 后消失。

  • 可通过 OUT 参数或会话变量保存值。

6.2条件语句

  • IF-THEN-ELSE
IF var = 0 THEN...
END IF;IF var = 0 THEN...
ELSE...
END IF;
CREATE procedure addstudent(SNo int,LPwd VARCHAR(20),SName VARCHAR(20),out res VARCHAR(20)
)
BEGINDECLARE n INT DEFAULT 0;SELECT COUNT(1) INTO n FROM student WHERE SName=StudentName ;IF n=0 THENINSERT INTO student (StudentNo,LoginPwd,StudentName) VALUES(SNo,Lpwd,Sname);SET res='新增成功';ELSESET res='新增失败';END IF;
ENDSET @res='';
CALL addstudent(1100,'123112','远远',@res);
SELECT @res;
  • CASE-WHEN-THEN-ELSE
CASE varWHEN 0 THEN ...WHEN 1 THEN ...ELSE ...
END CASE;
CREATE PROCEDURE GetStudentLevel(student_id INT,subject_id INT )
BEGINSELECT StudentResult,CASEWHEN StudentResult >= 90 THEN '优秀'WHEN StudentResult >= 80 THEN '良好'WHEN StudentResult >= 60 THEN '及格'ELSE '不及格'END AS LevelFROM resultWHERE StudentNO = student_id AND SubjectNo = subject_id;
END CALL GetStudentLevel(100,1);

6.3循环语句

  • WHILE-DO…END WHILE
WHILE var < 6 DO...
END WHILE;
CREATE PROCEDURE addstudent2(IN LPwd VARCHAR(20),IN SName VARCHAR(20),OUT res VARCHAR(20)
)
BEGINDECLARE n INT DEFAULT 0;DECLARE i INT DEFAULT 0;SELECT COUNT(1) INTO n FROM student WHERE StudentName = SName;IF n = 0 THENWHILE i < 3 DOINSERT INTO student (LoginPwd, StudentName) VALUES (LPwd, CONCAT(SName, i));SET i = i + 1;END WHILE;SET res = '新增成功';ELSESET res = '新增失败';END IF;
END SET @res = '';
CALL addstudent1('0725', '杨洋', @res);

7.MySQL 存储过程常用函数

7.1字符串函数:

  • CHARSET(str):返回字符集
  • CONCAT(string2, ...):连接字符串
  • INSTR(string, substring):返回子串位置
  • LCASE(string2):转小写
  • LEFT(string2, length):从左取字符
  • LENGTH(string):字符串长度
  • LOCATE(substring, string [, start]):定位子串
  • LPAD(string2, length, pad):左填充
  • LTRIM(string2):去除前端空格
  • REPEAT(string2, count):重复字符串
  • REPLACE(str, search_str, replace_str):替换字符串
  • RPAD(string2, length, pad):右填充
  • RTRIM(string2):去除后端空格
  • STRCMP(string1, string2):比较字符串
  • SUBSTRING(str, position [, length]):截取字符串
  • TRIM(...):去除指定字符
  • UCASE(string2):转大写
  • RIGHT(string2, length):从右取字符
  • SPACE(count):生成空格

7.2数学函数

  • ABS(number2):绝对值
  • BIN(decimal_number):十进制转二进制
  • CEILING(number2):向上取整
  • CONV(number2, from_base, to_base):进制转换
  • FLOOR(number2):向下取整
  • FORMAT(number, decimal_places):保留小数位数
  • HEX(DecimalNumber):转十六进制
  • LEAST(number, number2, ...):求最小值
  • MOD(numerator, denominator):求余
  • POWER(number, power):求指数
  • RAND([seed]):随机数
  • ROUND(number [, decimals]):四舍五入
  • SIGN(number2):返回正负号

7.3日期时间函数

  • ADDTIME(date2, time_interval):加时间间隔
  • CONVERT_TZ(datetime2, fromTZ, toTZ):转换时区
  • CURRENT_DATE():当前日期
  • CURRENT_TIME():当前时间
  • CURRENT_TIMESTAMP():当前时间戳
  • DATE(datetime):返回日期部分
  • DATE_ADD(date2, INTERVAL d_value d_type):加日期或时间
  • DATE_FORMAT(datetime, FormatCodes):格式化日期
  • DATE_SUB(date2, INTERVAL d_value d_type):减日期或时间
  • DATEDIFF(date1, date2):日期差
  • DAY(date):返回天数
  • DAYNAME(date):英文星期
  • DAYOFWEEK(date):星期几(1-7,1为周日)
  • DAYOFYEAR(date):年中第几天
  • EXTRACT(interval_name FROM date):提取日期部分
  • MAKEDATE(year, day):生成日期串
  • MAKETIME(hour, minute, second):生成时间串
  • MONTHNAME(date):英文月份名
  • NOW():当前时间
  • SEC_TO_TIME(seconds):秒转时间
  • STR_TO_DATE(string, format):字符串转时间
  • TIMEDIFF(datetime1, datetime2):时间差
  • TIME_TO_SEC(time):时间转秒数
  • WEEK(date_time [, start_of_week]):第几周
  • YEAR(datetime):年份
  • DAYOFMONTH(datetime):月中第几天
  • HOUR(datetime):小时
  • LAST_DAY(date):月最后一天
  • MICROSECOND(datetime):微秒
  • MONTH(datetime):月份
  • MINUTE(datetime):分钟
  • SQRT(number2):开平方
http://www.dtcms.com/a/395739.html

相关文章:

  • mysql默认事务隔离级别下并发读不到最新数据解决方案
  • M3U8通用下载器
  • Vue动态组件详细用法指南
  • C#练习题——委托练习
  • 【TS4】简单的typescript练手项目
  • 前端学习手册-JavaScript函数与回调(十一)
  • Unity小游戏接入抖音敏感词检测
  • 【2025最新】01 Spring Boot 第一个小程序 for VS Code - 通过 Spring Initializr 网站创建
  • 算法面试(3)------YOLO 的核心思想是什么?YOLOv1 到 v8 的演进路线?
  • docker 部署gitlib
  • SpringBoot3.5.5版本大坑
  • Lightroom Classic 2025专业级数字照片管理与后期处理全解析
  • 交叉编译工具链
  • 前端构建工具有哪些?常用前端构建工具推荐、前端构建工具对比与最佳实践
  • 【RocketMQ入门到精通 | 4】工作原理:indexFile索引文件
  • PPIO首发上线DeepSeek-V3.1-Terminus
  • 《嵌入式驱动(一):系统移植》
  • C语言(长期更新)第22讲:文件操作(一)
  • 财务管控——解读79页集团财务业务管控方法及信息化应用案例【附全文阅读】
  • 火语言RPA:解锁开发者工作流的“自动化密码”
  • 用户行为数据可视化
  • jdbc-数据更新与删除
  • 【GitLab】GitLab-CI(shell方式)入门配置
  • Python入门 | 三个if语句程序作业和基础语法笔记
  • BeanPropertyRowMapper
  • 深入解析Java中String的不可变性
  • windows-安装kafka并启动
  • linux 驱动私有数据
  • 信息系统监理师软考备考指南:组织协调与沟通管理专题精讲
  • 【开题答辩全过程】以 JAVA农产品销售系统为例,包含答辩的问题和答案