MySQL存儲過程圖文實例講解

 更新時間:2022年03月09日 15:56:27   作者:程裕強  
雖然MySQL的存儲過程一般情況下是不會使用到的,但是在一些特殊場景中,還是有需求的,下面這篇文章主要給大家介紹了關于MySQL存儲過程的相關資料,需要的朋友可以參考下

MySQL的存儲過程

存儲過程是數據庫的一個重要的功能,MySQL 5.0以前并不支持存儲過程,這使得MySQL在應用上大打折扣。好在MySQL 5.0開始支持存儲過程,這樣即可以大大提高數據庫的處理速度,同時也可以提高數據庫編程的靈活性。

MySQL存儲過程的創建

語法

CREATE PROCEDURE  過程名([[IN|OUT|INOUT] 參數名 數據類型[,[IN|OUT|INOUT] 參數名 數據類型…]]) [特性 ...] 過程體

DELIMITER //
  CREATE PROCEDURE myproc(OUT s int)
    BEGIN
      SELECT COUNT(*) INTO s FROM students;
    END
    //
DELIMITER ;

分隔符

MySQL默認以";"為分隔符,如果沒有聲明分割符,則編譯器會把存儲過程當成SQL語句進行處理,因此編譯過程會報錯,所以要事先用“DELIMITER //”聲明當前段分隔符,讓編譯器把兩個"//"之間的內容當做存儲過程的代碼,不會執行這些代碼;“DELIMITER ;”的意為把分隔符還原。

參數

存儲過程根據需要可能會有輸入、輸出、輸入輸出參數,如果有多個參數用","分割開。MySQL存儲過程的參數用在存儲過程的定義,共有三種參數類型,IN,OUT,INOUT:

IN參數的值必須在調用存儲過程時指定,在存儲過程中修改該參數的值不能被返回,為默認值OUT:該值可在存儲過程內部被改變,并可返回INOUT:調用時指定,并且可被改變和返回

過程體

過程體的開始與結束使用BEGIN與END進行標識。

1、簡單實例

create procedure demo.p_test1()
begin
  -- 使用 declare語句聲明一個變量
  declare id int default 0;
  declare name varchar(50) default '';
  -- 使用set語句給變量賦值
  set id=7521;
  -- 將users表中id=1的名稱賦值給username
  select ename into name from demo.emp where empno=id;
  -- 返回變量
  select name;
end;

2、通過游標遍歷結果集

create table demo.test(
	id int,
	cnt varchar(50)
)
create procedure demo.p_test2()
-- 通過游標遍歷結果集
begin
  -- 聲明變量
  declare id int default 0;
  declare name varchar(50) default '';
  declare done boolean default 1;
  -- 聲明游標
  declare rs cursor for SELECT deptno,dname from demo.dept ;
  -- 定義異常:
  declare continue handler for SQLSTATE '02000' SET done = 0; 
  -- 打開游標
  open rs;
  delete from demo.test;
  while done do 
  	begin
	  fetch rs into id,name;
      INSERT into demo.test SELECT e.deptno,count(1) from demo.emp e WHERE e.deptno =id group by e.deptno;
     end ;
  end while;
  -- 關閉游標
  close rs;
end;
call demo.p_test2();

SELECT * from  demo.test;

總結 

到此這篇關于MySQL存儲過程講解的文章就介紹到這了,更多相關MySQL存儲過程內容請搜索腳本之家以前的文章或繼續瀏覽下面的相關文章希望大家以后多多支持腳本之家!

相關文章

  • mac安裝mysql數據庫及配置環境變量的圖文教程

    mac安裝mysql數據庫及配置環境變量的圖文教程

    本文主要介紹了mac安裝mysql數據庫及配置環境變量,文中通過圖文代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2021-08-08
  • MySQL 查詢速度慢與性能差的原因與解決方法

    MySQL 查詢速度慢與性能差的原因與解決方法

    隨著網站數據量與訪問量的增加,MySQL 查詢速度慢與性能差的問題就日漸明顯,這里為大家分享一下解決方法,需要的朋友可以參考下
    2019-09-09
  • mysql 5.7 的 /etc/my.cnf 參數介紹

    mysql 5.7 的 /etc/my.cnf 參數介紹

    這篇文章主要介紹了mysql 5.7 的 /etc/my.cnf 參數介紹,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-12-12
  • MySQL新建用戶中的%到底包不包括localhost?

    MySQL新建用戶中的%到底包不包括localhost?

    操作MySQL的時候發現,有時只建了%的賬號,可以通過localhost連接,有時候卻不可以,網上搜索也找不到滿意的答案,干脆手動測試一波
    2019-02-02
  • MySQL 實現樹的遍歷詳解及簡單實現示例

    MySQL 實現樹的遍歷詳解及簡單實現示例

    這篇文章主要介紹了MySQL 實現樹的遍歷詳解及簡單實現示例的相關資料,這里提供了示例代碼及測試結果,需要的朋友可以參考下
    2017-01-01
  • 分組查詢GROUP BY的使用與SQL執行順序的講解

    分組查詢GROUP BY的使用與SQL執行順序的講解

    今天小編就為大家分享一篇關于分組查詢GROUP BY的使用與SQL執行順序的講解,小編覺得內容挺不錯的,現在分享給大家,具有很好的參考價值,需要的朋友一起跟隨小編來看看吧
    2019-03-03
  • Linux服務器中MySQL遠程連接的開啟方法

    Linux服務器中MySQL遠程連接的開啟方法

    今天在Linux服務器上安裝了msyql數據庫,在本地訪問的時候可以訪問,但是我想通過遠程的方式訪問的時候就不能訪問了,查詢資料后發現,Linux下MySQL默認安裝完成后只有本地訪問的權限,沒有遠程訪問的權限,需要你給指定用戶設置訪問權限才能遠程訪問該數據庫
    2017-06-06
  • Node.js對MySQL數據庫的增刪改查實戰記錄

    Node.js對MySQL數據庫的增刪改查實戰記錄

    這篇文章主要給大家介紹了關于Node.js對MySQL數據庫的增刪改查的相關資料,文中通過實例代碼介紹的非常詳細,對大家的學習或者工作介紹的非常詳細,需要的朋友可以參考下
    2021-10-10
  • MySQL 數據類型詳情

    MySQL 數據類型詳情

    這篇文章主要介紹了MySQL 數據類型,數值類型分類又分嚴格數值類型和近似數值數據類型,下面文章圍繞MySQL 數據類型展開內容,需要的朋友可以參考一下
    2021-11-11
  • MySQL與PHP的基礎與應用專題之數據完整性

    MySQL與PHP的基礎與應用專題之數據完整性

    MySQL是一個關系型數據庫管理系統,由瑞典MySQL?AB?公司開發,屬于?Oracle?旗下產品。MySQL?是最流行的關系型數據庫管理系統之一,本系列將帶你掌握php與mysql的基礎應用,本篇從數據完整性開始
    2022-02-02

最新評論

免费人成视频在线观看