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);
相关推荐
paopaokaka_luck1 小时前
心理咨询管理系统(WebSocket实时沟通、基于用户的协同过滤、 ECharts多维分析、 预约业务流程、预约校验与定时处理)
java·vue.js·spring boot·mysql·spring·echarts·1024程序员节
2301_32241428042 小时前
springboot农产品交易平台的设计与实现08055-计算机毕设 原创(免费领源码+部署教程+开发环境)
java·spring boot·redis·mysql·tomcat·maven·mybatis
ha_lydms4 小时前
AnalyticDB MySQL 技术架构
大数据·hadoop·mysql·adb·spark·dataworks·1024程序员节
Random Glow6 小时前
聚簇索引 vs 二级索引:回表、覆盖索引、索引下推
数据库·mysql·性能优化·innodb·1024程序员节·索引优化
要开心吖ZSH7 小时前
一次线上锁风暴复盘:号源表大范围 DELETE 的隐患与分批删除改造
数据库·mysql·行锁·1024程序员节·间隙锁·lockwaittimeout
John_Hui10 小时前
MySQL 进阶知识
数据库·sql·mysql·1024程序员节
Random Glow10 小时前
一条 SQL 从输入到返回,中间经历了什么
数据库·后端·mysql·性能优化·innodb·1024程序员节
何中应10 小时前
MySQL 连接驱动单独下载的两种方式
数据库·mysql·maven
余槐i10 小时前
开虚拟线程后接口反而更慢:JDK 21 synchronized 锁住载体线程的排查
java·spring boot·redis·mysql·性能优化
csdn_aspnet10 小时前
.NETCore EF Core 根据 mysql 数据表按顺序生成简单编号
mysql·.net core·efcore·1024程序员节·sequence·编号