概念
存储过程:在数据库中预先定义好一组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);