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

Java学习 - MySQL数据存储过程 + 函数 + 触发器介绍实例

存储过程

存储过程的概念和优点

  • 概念:存储过程是一组预先编译好的SQL语句的集合
  • 类比:存储过程类似于 Go 中的函数
  • 优点:提高代码重用性,简化操作,减少编译次数

创建存储过程

  • 创建语法

    DELIMITER $  # 不能加分号CREATE PROCEDURE 存储过程名(参数列表)
    BEGIN存储过程语句块
    END;$DELIMITER ;
    
  • 参数形式

    参数模式 参数名 参数类型
    
    参数形式说明
    IN作为输入
    OUT作为输出
    INOUT既可作为输入,又可作为输出
  • 注意事项

    • 如果存储过程只有一句SQL,则可以省略BEGIN-END
    • 存储过程中的SQL都必须以分号结尾,所以存储过程结尾可以用 DELIMITER 重新设置
  • 例子

    DELIMITER $  # 不能加分号CREATE PROCEDURE myprocedure1()
    BEGININSERT INTO admin(username,passwd)VALUES ('jack','0000'),('lily','0000');
    END; $DELIMITER ;
    
    DELIMITER $ # 不能加分号CREATE PROCEDURE myprocedure2(IN name VARCHAR(20))
    BEGINSELECT *FROM boys AS bRIGHT JOIN girls AS gON b.id = g.idWHERE b.name = name;
    END; $DELIMITER ;
    
    DELIMITER $ # 不能加分号CREATE PROCEDURE myprocedure3(IN username VARCHAR(20), IN passwd VARCHAR(20))
    BEGINDECLARE result VARCHAR(20) DEFAULT ''; # 声明局部变量SELECT COUNT(*) INTO result # 为局部变量赋值FROM adminWHERE admin.username = username AND admin.passwd = passwd;SELECT result; # 使用局部变量
    END; $DELIMITER ;
    
    DELIMITER $ # 不能加分号CREATE PROCEDURE myprocedure4(IN girlName VARCHAR(20), OUT boyName VARCHAR(20))
    BEGINSELECT b.name INTO boyNameFROM boys AS bJOIN girls AS gON b.id = g.idWHERE g.name = girlName;
    END; $DELIMITER ;
    

删除存储过程

DROP PROCEDURE myprocedure1;

存储过程不能更改,如果想改变,可以先删除,再创建

查看存储过程创建

SHOW CREATE PROCEDURE myprocedure1;

查看有哪些存储过程

SHOW PROCEDURE STATUS;

调用存储过程

CALL 存储过程名(实参列表);CALL myprocedure1();
CALL myprocedure2("小明");
CALL myprocedure3("xiaoming","123456");
CALL myprocedure4("小昭");

函数

函数的概念和优点

  • 概念:函数是一组预先编译好的SQL语句的集合
  • 类比:存储过程类似于 Go 中的函数
  • 优点:提高代码重用性,简化操作,减少编译次数

创建函数

  • 创建语法

    DELIMITER $CREATE FUNCTION 函数名(参数列表) RETURNS 返回类型
    BEGIN函数语句块
    END;$DELIMITER ;
    
  • 参数形式

    参数名 参数类型
    
  • 注意事项

    • 如果存储过程只有一句SQL,则可以省略BEGIN-END
    • 存储过程中的SQL都必须以分号结尾,所以存储过程结尾可以用 DELIMITER 重新设置
    • 必须有且只能有一个返回值,且必须有return语句
    • 函数如果使用 SELECT,则必须配合INTO关键字,使用SELECT … INTO … 的结构,因为函数中不允许出现结果集
    • 返回类型如果是varchar必须带长度

删除函数

DROP FUNCTION myfunction;

查看有哪些函数

SHOW FUNCTION STATUS;

查看函数创建

SHOW CREATE FUNCTION myfunction;

调用函数

SELECT 函数名(参数列表);

触发器

触发器概念

  • 触发器概念:一类特殊的事务,可以监视某种DML操作,并触发相关DML操作

创建触发器

DELIMITER $CREATE TRIGGER 触发器名字
AFTER|BEFORE INSERT|UPDATE|DELETE ON 表名
FOR EACH ROW  # 固定写法
BEGIN一句或多句DML操作SQL语句
END;$
使用旧值与新值
  • 对于 INSERT
    • 用new表示插入的新行,比如 new.name,new.id
  • 对于 UPDATE
    • 用new表示修改后的行,old表示修改前的行
    • 比如 new.g_count,old.g_count
  • 对于 DELETE
    • 用old表示已经删除的行,比如old.name,old.id

删除触发器

DROP TRIGGER 触发器名

查看触发器

  • 查看所有的触发器

    SHOW TRIGGER STATUS;
    
  • 查看某个触发器的创建语句

    SHOW CREATE TRIGGER 触发器名;
    

调用触发器

  • 触发器是自动触发的,无法手动触发

相关文章:

  • ES6 .entries用法
  • WordPress模板推荐
  • python GUI开发: tkinter事件处理的几种方式详解与应用实战
  • 【数据库编程-SQLite3(二)】API-增删改查基础函数-(含源码)
  • Linux下Shell脚本基础知识
  • 2024数据库期末综合解析(部分题)
  • Docker 安装 MySQL5.7 和 MySQL8
  • 10.Docker Compose容器编排
  • 数据结构01 栈及其相关问题讲解【C++实现】
  • 安全智能体的前沿技术研究与实践
  • 1527. 患某种疾病的患者
  • 如何根据CAP原理设计分布式系统
  • 集合面试题
  • 微信小程序地图
  • JavaFX BorderPane布局
  • 345-反转字符串中的元音字母
  • C语言笔记(第一章:C语言编程)
  • ECMAScript6(0):ES6简明参考手册
  • Hibernate最全面试题
  • JavaScript 事件——“事件类型”中“HTML5事件”的注意要点
  • Javascript弹出层-初探
  • JavaScript函数式编程(一)
  • Mithril.js 入门介绍
  • PHP的Ev教程三(Periodic watcher)
  • Python_OOP
  • Spring框架之我见(三)——IOC、AOP
  • TiDB 源码阅读系列文章(十)Chunk 和执行框架简介
  • 产品三维模型在线预览
  • 成为一名优秀的Developer的书单
  • 精益 React 学习指南 (Lean React)- 1.5 React 与 DOM
  • 两列自适应布局方案整理
  • 什么是Javascript函数节流?
  • 思否第一天
  • 我感觉这是史上最牛的防sql注入方法类
  • 异常机制详解
  • 源码安装memcached和php memcache扩展
  • 好程序员大数据教程Hadoop全分布安装(非HA)
  • 基于django的视频点播网站开发-step3-注册登录功能 ...
  • #java学习笔记(面向对象)----(未完结)
  • #Linux(帮助手册)
  • #我与Java虚拟机的故事#连载04:一本让自己没面子的书
  • $.ajax()
  • (12)Linux 常见的三种进程状态
  • (39)STM32——FLASH闪存
  • (C#)Windows Shell 外壳编程系列4 - 上下文菜单(iContextMenu)(二)嵌入菜单和执行命令...
  • (C语言)fread与fwrite详解
  • (翻译)terry crowley: 写给程序员
  • (个人笔记质量不佳)SQL 左连接、右连接、内连接的区别
  • (论文阅读26/100)Weakly-supervised learning with convolutional neural networks
  • (完整代码)R语言中利用SVM-RFE机器学习算法筛选关键因子
  • (学习总结16)C++模版2
  • (一)VirtualBox安装增强功能
  • (一)十分简易快速 自己训练样本 opencv级联haar分类器 车牌识别
  • (原)Matlab的svmtrain和svmclassify
  • (转)编辑寄语:因为爱心,所以美丽