日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区

您的位置:首頁技術文章
文章詳情頁

淺談MYSQL存儲過程和存儲函數

瀏覽:327日期:2023-05-05 10:11:54
目錄
  • 1. 什么是存儲過程和存儲函數?
  • 2. 創建存儲過程
  • 3. 創建存儲函數
  • 4. 存儲過程和存儲函數的使用
  • 5. 帶有if語句的存儲過程
  • 6. 帶有循環語句的存儲過程
  • 7. 帶有事務的存儲過程
  • 8. 帶有游標的存儲函數
  • 9. 存儲過程和存儲函數的優點
  • 10.總結

1. 什么是存儲過程和存儲函數?

  • 存儲過程(Stored Procedure)是指在一個數據庫中存儲的一組執行SQL語句的集合。存儲過程可以封裝業務邏輯,提高數據庫執行效率,同時也可以提高數據訪問的安全性。
  • 存儲函數(Stored Function)是指在一個數據庫中存儲的一組執行SQL語句的集合,與存儲過程的區別在于,存儲函數有一個返回值。

2. 創建存儲過程

CREATE PROCEDURE procedure_name([IN/OUT] parameter_name data_type)
BEGIN
    SQL Statement;
END;

假設我們已經有一張名為employee的員工表,現在需要創建一個存儲過程,可以根據員工的工號查詢員工的姓名和工資:

DELIMITER //
CREATE PROCEDURE get_employee_info_by_id(IN emp_id INT)
BEGIN
    SELECT name, salary FROM employee WHERE id = emp_id;
END //
DELIMITER ;

3. 創建存儲函數

CREATE FUNCTION function_name([IN/OUT] parameter_name data_type) RETURNS data_type
BEGIN
    DECLARE variable_name data_type;
    SQL Statement;
    RETURN variable_name;
END;

假設我們已經有一張名為product的商品表,現在需要創建一個存儲函數,可以根據商品的編號查詢商品的單價:

DELIMITER //
CREATE FUNCTION get_product_price_by_id(IN product_id INT) RETURNS DECIMAL(10,2)
BEGIN
    DECLARE price DECIMAL(10,2);
    SELECT unit_price INTO price FROM product WHERE id = product_id;
    RETURN price;
END //
DELIMITER ;

4. 存儲過程和存儲函數的使用

  • 調用存儲過程:
CALL procedure_name([parameter_name]);
  • 調用存儲函數:
SELECT function_name([parameter_name]);

使用上面創建的get_employee_info_by_id存儲過程可以這樣調用:

CALL get_employee_info_by_id(1);

使用上面創建的get_product_price_by_id存儲函數可以這樣調用:

SELECT get_product_price_by_id(1001);

以下是一些常見的存儲過程和存儲函數的示例:

5. 帶有if語句的存儲過程

假設我們已經有一張名為employee的員工表,現在需要創建一個存儲過程,查詢員工的姓名和工資,如果工資大于5000,則在結果中添加一個備注:“高收入”。

DELIMITER //
CREATE PROCEDURE get_employee_info_with_note()
BEGIN
    SELECT name, salary, IF(salary > 5000, "高收入", "") AS note FROM employee;
END //
DELIMITER ;

6. 帶有循環語句的存儲過程

假設我們已經有一張名為product的商品表,現在需要創建一個存儲過程,把商品的單價全部乘以1.1。

DELIMITER //
CREATE PROCEDURE update_all_product_price()
BEGIN
    DECLARE done INT DEFAULT FALSE;
    DECLARE pid INT;
    DECLARE price DECIMAL(10,2);
    DECLARE cur CURSOR FOR SELECT id, unit_price FROM product;
    DECLARE CONTINUE HANDLER FOR NOT FOUND SET done = TRUE;
    OPEN cur;
    read_loop: LOOP
FETCH cur INTO pid, price;
IF done THEN
    LEAVE read_loop;
END IF;
UPDATE product SET unit_price = price * 1.1 WHERE id = pid;
    END LOOP;
    CLOSE cur;
END //
DELIMITER ;

7. 帶有事務的存儲過程

假設我們已經有一張名為order的訂單表和一張名為order_item的訂單詳情表,現在需要創建一個存儲過程,向這兩張表中插入一條記錄。

DELIMITER //
CREATE PROCEDURE insert_order(IN order_id INT, IN item_name VARCHAR(50), IN item_price DECIMAL(10,2), IN item_quantity INT)
BEGIN
    START TRANSACTION;
    INSERT INTO `order`(id) VALUES(order_id);
    SET @last_order_id = LAST_INSERT_ID();
    INSERT INTO order_item(order_id, item_name, item_price, item_quantity) VALUES(@last_order_id, item_name, item_price, item_quantity);
    COMMIT;
END //
DELIMITER ;

8. 帶有游標的存儲函數

假設我們已經有一張名為product的商品表,現在需要創建一個存儲函數,查詢商品表中的最大單價。

DELIMITER //
CREATE FUNCTION get_max_product_price() RETURNS DECIMAL(10,2)
BEGIN
    DECLARE max_price DECIMAL(10,2);
    DECLARE cur CURSOR FOR SELECT unit_price FROM product;
    DECLARE CONTINUE HANDLER FOR NOT FOUND SET max_price = 0;
    OPEN cur;
    FETCH cur INTO max_price;
    read_loop: LOOP
FETCH cur INTO max_price;
IF max_price IS NULL THEN
    LEAVE read_loop;
END IF;
IF max_price > @max_price THEN 
    SET @max_price = max_price;
END IF;
    END LOOP;
    CLOSE cur;
    RETURN max_price;
END //
DELIMITER ;

以上就是MYSQL存儲過程和存儲函數的學習文章及示例,希望對您有幫助。

9. 存儲過程和存儲函數的優點

  • 代碼可以重復使用,避免重復編寫SQL語句;
  • 在存儲過程和存儲函數中可以使用流程控制語句,處理復雜邏輯;
  • 通過存儲過程和存儲函數可以對數據庫操作進行封裝,提高效率和安全性。

10.總結

在MYSQL中,存儲過程和存儲函數可以幫助我們封裝業務邏輯,提高數據庫執行效率,同時也可以提高數據訪問的安全性。學會使用存儲過程和存儲函數可以幫助我們更好地管理和優化數據庫。

到此這篇關于淺談MYSQL存儲過程和存儲函數的文章就介紹到這了,更多相關MYSQL存儲過程和存儲函數內容請搜索以前的文章或繼續瀏覽下面的相關文章希望大家以后多多支持!

標簽: MySQL
相關文章:
日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区
黑人精品一区| 99视频精品全部免费在线视频| 日本午夜精品一区二区三区电影| 国产日韩欧美在线播放不卡| 精品精品久久| 亚洲成人二区| 综合一区二区三区| 国产劲爆久久| 国产一区清纯| 日韩二区在线观看| 天堂av在线| 蜜桃视频在线观看一区| 国产一区福利| 亚洲一区中文| 久久精品资源| 伊人久久高清| 亚洲资源网站| 国产成人1区| 模特精品在线| 粉嫩av一区二区三区四区五区 | 精品国产欧美| 黑丝美女一区二区| 国产精品美女在线观看直播| 99久久夜色精品国产亚洲狼| 亚洲精品高潮| 欧美13videosex性极品| 中文字幕免费精品| 中文字幕人成乱码在线观看| 亚洲bt欧美bt精品777| 97在线精品| 日韩高清一区二区| 欧美日韩水蜜桃| 国产精品亚洲欧美一级在线| 欧美日韩第一| 麻豆免费精品视频| 视频一区在线视频| 国产不卡人人| 国产欧美一区二区三区米奇| 亚洲精品小说| 狂野欧美性猛交xxxx| 一区二区精彩视频| 99久久久久国产精品| 日本aⅴ精品一区二区三区| 久久国产电影| 精品视频网站| 日韩高清欧美激情| 欧美另类专区| 日韩欧美视频专区| 国产乱论精品| 日韩中文字幕不卡| 久久影视一区| 精品入口麻豆88视频| 亚洲三级av| 欧美国产91| 国产一区日韩| 国产私拍福利精品视频二区| 美女精品在线观看| 欧美69视频| 福利在线一区| 国产精品麻豆成人av电影艾秋| 亚洲资源网站| 视频一区二区欧美| 岛国精品一区| 成人一区不卡| 另类av一区二区| 精品国产一区二区三区2021| 亚洲欧洲一区二区天堂久久| 国产精品久久免费视频| 在线一区欧美| 精品国产亚洲一区二区三区在线 | 久久国产直播| 久久久亚洲欧洲日产| 欧美一区免费| 综合一区二区三区| 亚洲欧美日韩精品一区二区 | 国模大尺度视频一区二区| 欧美日韩一区自拍| 日韩三级久久| 中文字幕日本一区| 丝袜美腿亚洲色图| 9国产精品视频| 五月精品视频| 欧美日韩国产免费观看视频| 成人羞羞视频播放网站| 久久男人天堂| 精品在线91| 国产精品一区毛片| 国产欧美丝祙| 久久精品av麻豆的观看方式| 亚洲一级大片| 亚洲免费毛片| 日产欧产美韩系列久久99| 蜜桃久久精品一区二区| 免费美女久久99| 美国欧美日韩国产在线播放| 丝袜美腿亚洲一区| 老牛影视一区二区三区| 国产精品毛片| 中文字幕一区日韩精品| 日韩**一区毛片| 欧美日本久久| 精品久久电影| 91精品国产福利在线观看麻豆| 麻豆91精品视频| 国产精品xxx在线观看| 精品一级视频| 色爱综合网欧美| 亚洲性色av| 婷婷成人综合| 亚洲欧美日韩视频二区| 亚洲精品在线a| 欧美啪啪一区| 国语精品一区| 91精品一区二区三区综合| 在线一区免费| 日韩欧美激情电影| 欧美成人一二区| 国产不卡一区| 免费精品国产| 老司机精品久久| 91精品国产自产观看在线| 麻豆成人91精品二区三区| 日韩一区二区中文| 亚洲精品va| 日韩精品三区四区| 久久精品一区二区三区中文字幕| 青青久久av| 宅男噜噜噜66国产日韩在线观看| 亚洲精品在线二区| 久久99久久人婷婷精品综合| 日韩高清欧美| 99国产精品| 国产欧美日韩在线一区二区 | 亚洲天堂av资源在线观看| 日本不卡在线视频| 福利一区二区免费视频| 狠狠干综合网| 国产精品一级在线观看| 精品欧美一区二区三区在线观看| 午夜在线视频一区二区区别| 国产亚洲高清在线观看| 日韩免费视频| 综合激情网站| 国产精品久久久久蜜臀| 好看不卡的中文字幕| 日本午夜精品一区二区三区电影 | 午夜在线视频观看日韩17c| 国产探花在线精品一区二区| 最新中文字幕在线播放| 亚洲欧美视频| 美女精品久久| 欧美日韩国产一区二区三区不卡| 日韩国产91| 亚洲电影有码| 免费人成精品欧美精品| 粉嫩av一区二区三区四区五区| 亚洲欧洲日本mm| 麻豆一区在线| 国产视频一区免费看| 久久99久久人婷婷精品综合| 亚洲欧洲一区二区天堂久久| 美女国产精品久久久| 国产精品试看| 国语对白精品一区二区| 日本精品在线播放| 亚洲福利免费| 免费亚洲婷婷| 免费在线观看一区二区三区| 亚洲深夜视频| 日本综合精品一区| 999精品色在线播放| 国产日本久久| 9久re热视频在线精品| 91视频久久| 欧美视频久久| 亚洲欧美日韩视频二区| 91欧美日韩| 久久精品凹凸全集| 欧美日韩国产亚洲一区| 激情不卡一区二区三区视频在线| 日本亚州欧洲精品不卡| 国产一区日韩一区| 日产午夜精品一线二线三线| 日韩av一区二区三区四区| 久久在线免费| 精品国产乱码久久久久久樱花 | 最新国产精品| 亚洲成人一区| 成人亚洲一区二区| 国产精品国码视频| 一区二区三区四区日韩| 免费久久久久久久久| 国产欧洲在线| 欧美91在线| 国产色噜噜噜91在线精品| 中文字幕av亚洲精品一部二部| 欧美日韩国产传媒| 久草免费在线视频| 久久亚州av| 国产九九精品|