mysql存儲過程詳解,跟老韓一起學習吧

2021-01-08 IT大叔老韓的生活

在實際工作中可能會碰到這樣的需求,我經常會進行一些操作,這些操作是固定的,但是每次操作都要寫幾十條語句,如何解決這個問題呢?那就跟著老韓學習mysql存儲過程把,學完了之後這個問題迎刃而解,Let's go。

一、概念;

存儲過程(Stored Procedure)是在大型資料庫系統中,一組為了完成特定功能的SQL 語句集,它存儲在資料庫中,一次編譯後永久有效,用戶通過指定存儲過程的名字並給出參數(如果該存儲過程帶有參數)來執行它。存儲過程是資料庫中的一個重要對象。

二、存儲過程優點;

1、優點;

存儲過程可封裝,並隱藏複雜的商業邏輯。

存儲過程可以回傳值,並可以接受參數。

存儲過程無法使用 SELECT 指令來運行,因為它是子程序,與查看表,數據表或用戶定義函數不同。

存儲過程可以用在數據檢驗,強制實行商業邏輯等。

執行效率高。

三、存儲過程和函數的區別;

有不少初學者朋友分不清存儲過程和函數,覺得函數和存儲過程好像沒有什麼區別,

1、存儲過程;

用於在資料庫中完成特定的操作或者任務(如插入、刪除等);

程序頭部聲明用procedure;

程序頭部聲明時不需描述;

返回類型可以使用in/out/in out 三種模式的參數;

作為一個獨立個體執行(使用關鍵字call後面跟存儲過程名字來執行);

可以通過out/in out 返回零個或多個值;

SQL語句(DML 或SELECT)中不可調用存儲過程(作為一個獨立個體執行可看出);

2、函數;

用於特定的數據處理(如獲取今天的日期);

程序頭部聲明用function;

程序頭部聲明時要描述返回類型,而且PL/SQL塊中至少要包括一個有效的return語句;

可以使用in/out/in out 三種模式的參數;

不能獨立執行,必須作為表達式的一部分調用;

通過return語句返回一個值,且改值要與聲明部分一致,也可以是通過out類型的參數帶出的變量;

SQL語句(DML 或SELECT)中可以調用函數;

四、如何自己創建一個存儲過程;

標準寫法:

create procedure 存儲過程名稱( in/out/intout)

begin

語句(可多個語句)

end

1、無參的存儲過程;

2、有參數的存儲過程;

3、有返回值的存儲過程;

4、有參數和返回值的存儲過程;

五、執行、更新、刪除存儲過程

1、執行存儲過程;

執行存儲過程使用call來調用,如上面的四個例子中,第一個就是call del;

有參的調用方法為call ad(6);該語句會自動列印total的值,因為在存儲過程中最後一個語句是select total,相當於給total的值查詢了出來;

有返回值的存儲過程可以使用call add(6,@sum),想得到out的值,需要再跟一個select @sum,相當於我傳入了一個參數6,同時聲明一個變量@sum來接收返回值,最後select @sum查詢返回值的值;

有參數和返回值的存儲過程調用方法為set @nub = 6;call plus(@nub),select @nub,相當於我先聲明一個變量等於6,把變量傳入之後進行運算,相當於給這個變量重新賦值,然後再查詢這個變量的值。

2、更新存儲過程;

ALTER PROCEDURE <過程名> [ <特徵> … ]

3、刪除存儲過程;

drop procedure 存儲過程名字;

存儲過程就講完了,當然老韓講的都是很簡單的存儲過程,帶參數的存儲過程老韓說心裡話還沒有用過,前面老韓講了一個年假自動更新的操作大家還記得嗎?就是每天24:00定時執行一個操作,判斷人員入職滿一年就自動累加年假天數的需求,這個其實就是存儲過程和定時器聯合使用的案例,存儲過程還支持嵌套,就是存儲過程中可以嵌套存儲過程,很多時候只要邏輯上沒問題都是可以的,希望大家能理解基礎的,在基礎上延伸,去提升。

今天的內容就到這裡,沒有關注的朋友可以點一下關注,你們每一次的關注、轉發、收藏都是老韓持續更新的動力,謝謝觀看,我們下期觸發器再見。

相關焦點

  • 老韓分享自己在Eclipse使用JDBC連接mysql8.016時所遇到的坑
    接下來老韓來分享在Eclipse使用JDBC連接mysql8.016時所遇到的坑,希望能幫到有的朋友。一、安裝;上次安裝mysql資料庫應該是15年的事了,既然說到這了順便提一嘴。如果有朋友想自己在linux搭建個LUMP環境(可以一鍵安裝),在下裝mysql的時候有yum的話肯定非常舒服,沒有yum的話就是自己下載了,可以使用老韓前幾天分享的壓縮包安裝mysql(略有差別)。
  • 淺析mysql存儲過程
    從名詞的含義就可以看到應該是一堆sql語句(多條)一起執行。而在真實的運用中也是這樣的,我們知道在mysql中,主要是命令行中,每一條語句結尾加 ; 表示語句結束。這樣我們就想到了是不是可以多句一起使用。這個叫做stacked injection。代碼中和一般查詢不同的是,使用了multi_query函數在SQL中,分號(;)是用來表示一條sql語句的結束。
  • 老韓講mysql觸發器,很強大也很簡單
    陸陸續續講了表、用戶、權限、各種SQL語句、存儲過程,今天老韓來講一下觸發器,老韓從觸發器的概念、分類、創建、案例來對它進行一個講解,希望讀者朋友可以有所收穫。然後自動觸發了預先編寫好的若干條SQL語句的執行;特點:觸發事件的操作和觸發器裡的SQL語句是一個事務操作,具有原子性,要麼全部執行,要麼都不執行;作用:保證數據的完整性,起到約束的作用;二、觸發器分類;觸發器大致分為表級觸發器和行級觸發器,很好理解,表級觸發器表示目標是表,針對表的修改只會觸發執行一次事件,行級觸發器對象是行,每有一行數據變動就會執行一次事件,舉個例子,老韓在
  • 老韓乾貨奉上mysql中的like和union(all)語句
    學習就是慢慢積累的過程,請自學編程的朋友戒驕戒躁,腳踏實地的學習。今天老韓來講一下like語句和union語句,一起來學吧。一、like語句;實際工作中數據索引的時候可能並不會給你明確指定要哪些數據,那麼結合前面所講的where字句就無法實現需求了,那就需要用模糊查詢like語句了。
  • MySql基礎,MySql視圖&索引&存儲過程&觸發器
    MySQL索引類型詳解索引的類型和存儲引擎有關,每種存儲引擎所支持的索引類型不一定完全相同。MySQL 索引可以從存儲方式、邏輯角度和實際使用的角度來進行分類。應該在學習和工作中不斷的實踐,根據應用的實際情況進行分析和判斷,選擇最合適的索引方式。存儲過程是什麼在資料庫的實際操作中,經常會有需要多條 SQL 語句處理多個表才能完成的操作。
  • DBA必備技能,mysql權限管理(DCL語句)
    今天要講的內容跟DBA有很大關係,想做DBA權限管理是很重要的,今天就講一下mysql中的權限管理。一、用戶管理;1、切換資料庫;如下圖所示,將界面切換至命令界面;輸入命令use mysql;這句代碼意思是切換資料庫,切換到mysql這個資料庫下面,因為用戶信息在mysql下的user表內存儲著。
  • MySQL存儲過程詳解
    作為過來人我剛開始也有這樣的苦惱,今天就給大家說說這個存儲過程該如何創建和使用。什麼是存儲過程存儲過程是一組可編程的函數,是為了完成特定功能的SQL語句集,經編譯創建並保存在資料庫中,用戶可通過指定存儲過程的名字並給定參數(需要時)來調用執行。
  • MySQL創建存儲過程
    存儲過程是資料庫管理中常用的技術之一,可以很方便的做些類似數據統計、數據分析等工作,市場上的SQL SERVER、ORACLE、MySQL都支持存儲過程,但不同的資料庫環境語法結構有點區別,本案例給大家講解下MySQL創建存儲過程的方法使用常規的創建存儲過程方法,發現各種報錯,無法執行
  • mysql的存儲過程的概念及創建語法詳解
    使用存儲過程的目的是將常用或複雜 的工作,預先用 SQL語句寫好並用一個指定名稱存儲起來,這個過程經編譯和優化後存儲 在資料庫伺服器中,因此稱為存儲過程。以後需要資料庫提供與已定義好的存儲過程的功 能相同的服務時,只需用 CALL 語句來調用存儲過程名字,即可自動完成命令。
  • MySQL存儲過程使用解析
    mysql存儲過程存儲過程(Stored Procedure)是一種在資料庫中存儲複雜程序,以便外部程序調用的一種資料庫對象。目的是為了完成特定功能的SQL語句集,經編譯創建並保存在資料庫中,用戶可通過指定存儲過程的名字並給定參數(需要時)來調用執行。說白了就是資料庫 SQL語言層面的代碼封裝與重用。創建的存儲過程通常保存在資料庫的數據字典中。
  • MySQL 高級 - 存儲過程和函數(上)
    好了我們繼續追夢吧。1.1 存儲過程和函數概述存儲過程和函數是 事先經過編譯並存儲在資料庫中的一段 SQL 語句的集合,調用存儲過程和函數可以簡化應用開發人員的很多工作,減少數據在資料庫和應用伺服器之間的傳輸,對於提高數據處理的效率是有好處的。存儲過程和函數的區別在於函數必須有返回值,而存儲過程沒有。
  • 關於mysql存儲過程和事務的概述
    存儲過程是sql語句和流程控制語句的預編譯集合,以一個名稱存儲並作為一個單元進行處理。基本語法:過程體:示例:存儲過程的參數:1.創建無參的存儲過程:2.創建帶有輸入參數和輸出參數的存儲過程:創建複合結構的存儲過程:1.使用條件判斷語句的存儲過程:2.使用循環語句的存儲過程
  • 一鍵導出mysql視圖、函數、存儲過程、事件、觸發器的定義腳本
    所以就順便整了一鍵導出視圖、函數、存儲過程、事件、觸發器的定義腳本,下面一起來看看吧~一鍵導出腳本腳本明細如下: .function,procedure,event,trigger&34;$db_name&34;+%Y-%m-%d %H:%M:%S&34;&34;& 視圖if [[ $output_type == *&34;* ]]then echo &34; >> $save_file echo &34; >> $save_file echo &34; >> $save_file mysql
  • MySQL存儲過程批量插入百萬條數據
    最近在做一個項目,需要批量插入一批數據(ps:隨機的),試想了一下,就想用mysql的存儲過程試下,因為是在個人本機測試的,可能插入的過百秒現在說下批量創建100萬條數據第一步:創建存儲過程:delimiter $$create procedure
  • MySQL創建存儲過程-百家號 - 百度經驗
    存儲過程是資料庫管理中常用的技術之一,可以很方便的做些類似數據統計、數據分析等工作,市場上的SQL SERVER、ORACLE、MySQL都支持存儲過程,但不同的資料庫環境語法結構有點區別,本案例給大家講解下MySQL創建存儲過程的方法使用常規的創建存儲過程方法,發現各種報錯,無法執行
  • MySQL當中的「My」是什麼意思?
    99年清華畢業,從程式設計師幹到CTO,一直致力於推動Java、大數據、AI生根中國,其高並發直播課程廣受歡迎,有千萬次播放學習。mysql架構體系(連機器,分析器,優化器,執行器)詳解mysql的存儲引擎(mysql的數據組織形式)詳解mysql的日誌系統(binlog,redolog,undolog)詳解mysql索引系統的架構設計詳解mysql索引系統的數據結構選擇
  • mysql的分區跟分表
    mysql的分區和分表分區分區就是把一個數據表的文件和索引分散存儲在不同的物理文件中。mysql支持的分區類型包括Range、List、Hash、Key,其中Range比較常用:RANGE分區:基於屬於一個給定連續區間的列值,把多行分配給分區。
  • 終於有人把MySQL微服務JvmNetty多線程給講明白了
    所以,有學歷的搞好自己的技術,沒有學歷的繼續提升自己的學歷;為了能夠幫助到大家的學習,小編特意整理了一套學習路線和視頻供大家學習,總共包含MySQL+億級流量微服務+Jvm+Netty+多線程與高並發+算法六部分,希望大家能夠喜歡!!
  • 花費三個月整理的MySQL系列文檔 誠意之作 看完不虧
    環境:mysql5.7.25,cmd命令中進行演示。開發過程中,會經常用到資料庫事務,所以本章非常重要。本篇內容1. 什麼是事務,它有什麼用?2. 事務的幾個特性3. 事務常見操作指令詳解4. 事務的隔離級別詳解5.
  • MySQL底層存儲結構
    Tablespace:回滾表空間,默認這個空間是和系統表空間共用一個表空間的,它不會單獨存在,和ibdata1系統表空間文件存在一起。2814:32 ibtmp1root@test:/var/lib/mysql#General Tablespace:一般表空間,就是平時我們用於存儲自己業務表中的數據用的表空間文件。