亚洲步兵一区二区三区-日韩精品伦理在线一区-亚洲色诱视频免费观看-久久人妻视频免费观看

廣州總部電話:020-85564311
廣州總部電話:020-85564311
20年
互聯網應用服務商
請輸入搜索關鍵詞
知識庫 知識庫

優網知識庫

探索行業前沿,共享知識寶庫

MySQL的存儲過程

發布日期:2025-08-23 17:25:52 瀏覽次數: 813 來源:YAHINA
推薦語
MySQL存儲過程:數據庫性能優化的秘密武器,讓SQL執行更高效安全。

核心內容:
1. 存儲過程的四大核心優勢:減少網絡流量、提高性能、增強安全性、代碼復用
2. MySQL存儲過程創建與調用的完整語法解析
3. 實際開發中的最佳實踐與使用建議
小優 網站建設顧問
專業來源于二十年的積累,用心讓我們做到更好!

MySQL的存储过程

存储过程是一组为了完成特定功能的 SQL 语句集,经编译后存储在数据库中,用户通过指定存储过程的名字并给出参数(如果该存储过程带有参数)来调用执行它。
核心优点
1. 减少网络流量:只需传递存储过程名和参数,而非多条 SQL 语句。
2. 提高性能:预编译,执行速度快。首次执行后,执行计划驻留在缓存中,后续调用直接使用。
3. 增强安全性和数据完整性:可以授权用户执行存储过程,而非直接操作底层表,实现更精细的权限控制。
4. 代码复用和模块化设计:将复杂业务逻辑封装,便于维护和重用。
存储过程在实际开发中应用很普遍,尤其是在基于SQL SERVER的项目中,如ERP或一些财务软件等,程序员习惯于把程序的逻辑写在存储过程中。 这样做的好处是简化了程序的代码,却给售后的维护和程序的修改带来无尽的麻烦。同时还会增加数据库服务器的负荷。我个人是不主张这行做的。 而在基于MYSQL的项目中则很少见到这样的情况。
所以我们在写工程时候通常是把一些,复杂的、多重的SQL语句写在一个存储过程中,调用的时候只需要传入参数即可。

基本语法

1. 创建存储过程 一般形式

DELIMITER // -- 临时修改分隔符,避免将过程中的 `;` 误认为结束符
CREATE PROCEDURE procedure_name (
[IN | OUT | INOUT] parameter_name parameter_type[(length)], ...
)
[characteristic ...] -- 特性,如 COMMENT、LANGUAGE SQL 等
BEGIN
-- 存储过程体(SQL 语句集合)
END //
DELIMITER ; -- 将分隔符改回分号

DELIMITER:临时更改语句分隔符,确保存储过程体内的分号不被误解。
参数模式:
    1. IN (默认):输入参数,调用者传入值给存储过程。
    2. OUT:输出参数,存储过程通过它返回值给调用者。
    3. INOUT:输入输出参数,调用者传入值,存储过程修改后返回。
    4. 过程体:包含有效的 SQL 语句,也可以使用流程控制语句(IF、CASE、LOOP 等)。

2 调用存储过程 CALL语句的使用

CALL procedure_name([parameter, ...]);

3 存储过程的查看

1. 查看定义
SHOW CREATE PROCEDURE procedure_name;
2. 查看数据库中的所有存储过程:
SHOW PROCEDURE STATUS WHERE Db = '你的数据库名';

具体案例

1. 简单的无参存储过程,实现查询所有用户电话

基于表user创建的存储过程

DELIMITER //
CREATE PROCEDURE Get_all_phones()
BEGIN
SELECT phone FROM user;
END //
DELIMITER ;
-- 调用
CALL Get_all_phones();

结果图:

2 带IN参数的存储过程

根据传入的学生ID查找

DELIMITER //
CREATE PROCEDURE Get_user_by_id(IN uid INT)
BEGIN
SELECT * FROM user WHERE id = uid;
END //
DELIMITER ;
-- 调用
CALL Get_user_by_id(2);

结果图:

3 带OUT参数的存储过程

获取电话以138开头的用户的个数

DELIMITER //
CREATE PROCEDURE Get_count_by_phone(IN phone_num_start INT,OUT phone_count INT)
BEGIN
SELECT COUNT(*) INTO phone_count FROM user WHERE phone like concat('',phone_num_start,'%'); -- 使用 INTO 将结果赋值给 OUT 参数
END //
DELIMITER ;
-- 调用
-- 先定义一个用户变量(以@开头)来接收 OUT 参数的值
CALL Get_count_by_phone(138, @count);
-- 查看返回的结果
SELECT @count AS 'Number of phones';

结果图:

4 带INOUT参数的存储过程

把一个数乘2后返回

DELIMITER //
CREATE PROCEDURE Double_number(INOUT num INT)
BEGIN
SET num = num * 2; -- 直接修改 INOUT 参数
END //
DELIMITER ;
-- 调用
SET @my_num = 5; -- 设置一个用户变量并赋初值
CALL Double_number(@my_num);
SELECT @my_num; -- 输出 10

结果图:


優網科技,優秀企業首選的互聯網供應服務商

優網科技秉承"專業團隊、品質服務" 的經營理念,誠信務實的服務了近萬家客戶,成為眾多世界500強、集團和上市公司的長期合作伙伴!

優網科技成立于2001年,擅長網站建設、網站與各類業務系統深度整合,致力于提供完善的企業互聯網解決方案。優網科技提供PC端網站建設(品牌展示型、官方門戶型、營銷商務型、電子商務型、信息門戶型、微信小程序定制開發、移動端應用(手機站APP開發)、微信定制開發(微信官網、微信商城、企業微信)等一系列互聯網應用服務。


我要投稿

姓名

文章鏈接

提交即表示你已閱讀并同意《個人信息保護聲明》

專屬顧問 專屬顧問
掃碼咨詢您的優網專屬顧問!
專屬顧問
馬上咨詢
聯系專屬顧問
聯系專屬顧問
聯系專屬顧問
掃一掃馬上咨詢
掃一掃馬上咨詢

掃一掃馬上咨詢

和我們在線交談!
主站蜘蛛池模板: 日本不卡一区二区三区在线视频| 国产精品久久国产三级国3| 日本熟妇网站大全视频| 91久久精品国产一区蜜臀| 久久国产精品人妻一区二区| av在线免费福利导航| 国产成人av二区三区| 亚洲精区二区三区四区麻豆| 韩国一区二区三区视频在线播放| 日韩欧美综合一区二区三区四区| 天天躁日日躁狠狠躁午夜| 欧美激情视频免费一区二区三区| 丰满老熟妇人妻双飞视频| 亚洲一区在线中文播放| 国产大学生激情视频在线| 青青网黄色片在线观看| 欧美精品中文字幕视频| 日本少妇性视频一区二区| 亚洲女性性欲啪啪视频| 精品国产精品视频在线观看| 青青操大香蕉在线视频| 免费网站在线观看污视频| 国产成人综合在线亚洲| 久久久久国产精品不卡| 亚洲激情校园春色国产| 人妻人人澡人人添人人爽av| 日韩精品一区二区三区精品| 欧美日韩国产一区二区的| 国产午夜一二三区精品| 久草免费高清在线视频| 青青草在线观免费视频| 另类精品视频在线观看| 欧美伦理片一区二区三区| av这些成年人免费看| 欧美精品区二区三区一在线观看| 亚洲一区二区成人精品在线观看 | 91人妻人人澡人人爽人| 中文字幕在线日本二区| 熟女二区91大香蕉熟女| 91亚洲精品一区在线| 亚洲成年人在线观看视频|