MySQL中存储过程(procedure)的使用

概念

存储过程:在数据库中预先定义好一组SQL语句,可以被程序反复调用。

优点:

  • 存储过程将一组复杂的SQL语句组成一个原子操作,保证数据一致性。
  • 批处理操作,保证操作高效性。
  • 通过存储过程可以限制用户对数据库中敏感数据访问。提高系统安全性。

示例1

1、MySQL创建存储过程。

sql 复制代码
DELIMITER $$
CREATE PROCEDURE GetCustomerDetails(IN haha INT)
BEGIN
    SELECT * FROM customer WHERE id = haha;
END $$
DELIMITER ;

2、MySQL调用存储过程。

sql 复制代码
call GetCustomerDetails(16);

3、Java调用存储过程。

sql 复制代码
<mapper namespace="com.example.MyMapper">
    <select id="getCustomerDetails" statementType="CALLABLE">
        {call GetCustomerDetails(#{customerId, mode=IN, jdbcType=INTEGER})}
    </select>

    <update id="updateCustomerDetails" statementType="CALLABLE">
        {call UpdateCustomerDetails(
            #{customerId, mode=IN, jdbcType=INTEGER},
            #{firstName, mode=IN, jdbcType=VARCHAR},
            #{lastName, mode=IN, jdbcType=VARCHAR}
        )}
    </update>
</mapper>

示例2

用存储过程来实现往一个表里持续插入数据的操作。

sql 复制代码
-- 创建存储过程
DELIMITER $$ #重新定义结束符
CREATE PROCEDURE person_procedure ( IN minNum INT, IN maxNum INT ) 
BEGIN
	DECLARE i INT DEFAULT minNum; #设置i初始值为minNum
	WHILE i <= maxNum DO
		INSERT INTO person (id,`name`,age,address) VALUES (i,concat( 'cve-', i, '' ),i,concat( '地址-', i, '' ));
		SET i = i + 1;
	END WHILE;
	SELECT CONCAT(i, ' rows inserted.') AS Result; #打印一个输出
END $$
DELIMITER; #重新定义结束符
-- MySQL调用存储过程
call person_procedure(1,10);
相关推荐
web1309332039817 分钟前
Mysql的安装配置教程(非常详细)从零基础入门到精通,看完这一篇就够了
数据库·mysql
鹅鹅鹅呢22 分钟前
mysql 登录报错:ERROR 1045(28000):Access denied for user ‘root‘@‘localhost‘ (using password Yes)
android·数据库·mysql
在人间负债^25 分钟前
假装自己是个小白 ---- 重新认识MySQL
android·数据库·mysql
元亓亓亓41 分钟前
MySQL--day1--数据库概述
数据库·mysql
筱宇***1 小时前
Mac的web服务器
mysql·nginx·macos·php
天空之城夢主3 小时前
shell 编程之正则表达式与文本处理器
数据库·mysql·正则表达式
进击的CJR4 小时前
MySQL 8.0 OCP 英文题库解析(三)
android·mysql·开闭原则
JhonKI4 小时前
【MySQL】变更缓冲区:作用、主要配置以及如何查看
数据库·mysql
老李不敲代码5 小时前
榕壹云打车系统:基于Spring Boot+MySQL+UniApp的开源网约车解决方案
spring boot·mysql·微信小程序·uni-app·软件需求
杨凯凡6 小时前
MySQL入门指南:环境搭建与服务管理全流程
数据库·mysql