1. 程式人生 > >MySQL儲存過程/儲存過程與自定義函式的區別

MySQL儲存過程/儲存過程與自定義函式的區別

儲存過程:

簡單的說,就是一組SQL語句集,功能強大,可以實現一些比較複雜的邏輯功能,類似於JAVA語言中的方法;

ps:儲存過程跟觸發器有點類似,都是一組SQL集,但是儲存過程是主動呼叫的,且功能比觸發器更加強大,觸發器是某件事觸發後自動呼叫;

有哪些特性:

有輸入輸出引數,可以宣告變數,有if/else, case,while等控制語句,通過編寫儲存過程,可以實現複雜的邏輯功能;

函式的普遍特性:模組化,封裝,程式碼複用;

速度快,只有首次執行需經過編譯和優化步驟,後續被呼叫可以直接執行,省去以上步驟;

建立一個簡單的儲存過程:

delimiter--修改預設結束符

其中IN表示輸入引數,OUT表示輸出引數,INOUT

表示既可以輸入也可以輸出;

param_name表示引數名稱;type表示引數的型別

delimiter //
CREATE PROCEDURE 
aff_order_pro(IN username CHAR(20) , IN pwd CHAR(32) , OUT insert_result TINYINT)
BEGIN
DECLARE user_id INT;
DECLARE user_info_id INT;
INSERT into `user`(user_name) VALUES(user_name); //新增使用者表
SET user_id = LAST_INSERT_ID(); //獲取上一次操作的id
INSERT INTO `user_info`(user_id,address)VALUE(user_id,address); //新增使用者詳情表
SET user_info_id = LAST_INSERT_ID();
if user_id and use_info_id THEN
SELECT 1 into insert_result;
ELSE
SELECT 0 INTO insert_result;
END if;
END //
delimiter ;

建立成功:


呼叫:

call insert_user_procedure('zhangsan','beijing',@insert_result); //呼叫建好的儲存過程

select @insert_result as insert_result; //輸出結果

儲存過程修改:

ALTER語句修改儲存過程只能修改儲存過程的註釋等無關緊要的東西,不能修改儲存過程體,所以要修改儲存過程,方法就是刪除重建!

刪除儲存過程:

DROP PROCEDURE [IF EXISTS] sp_name

建立無參儲存過程:

delimiter //
    CREATE PROCEDURE showTime()BEGINSELECT now();END//
delimiter ;

CALL showTime;

作用:顯示當前時間,沒什麼實際意義

儲存過程與自定義函式的區別:

    儲存過程實現的過程要複雜一些,而函式的針對性較強;

    儲存過程可以有多個返回值,而自定義函式只有一個返回值;

    儲存過程一般獨立的來執行,而函式往往是作為其他SQL語句的一部分來使用;

儲存過程存在的必要性(好處):

    儲存過程說白了就是把經常使用的SQL語句或業務邏輯封裝起來,預編譯儲存在資料庫中,當需要的時候從資料庫中直接呼叫,省去了編譯的過程.

    提高了執行速度;

    同時降低網路資料傳輸量(你覺得傳一堆SQL程式碼快,還是傳一個儲存過程名字和幾個引數快???)





相關推薦

Mysql儲存過程定義函式區別

建立儲存過程: CREATE [definer = {user|current_user}] PROCEDURE sp_name ([ proc_parameter [,proc_parameter ...]]) [ characteristi

MySQL儲存過程/儲存過程定義函式區別

儲存過程:簡單的說,就是一組SQL語句集,功能強大,可以實現一些比較複雜的邏輯功能,類似於JAVA語言中的方法;ps:儲存過程跟觸發器有點類似,都是一組SQL集,但是儲存過程是主動呼叫的,且功能比觸發器更加強大,觸發器是某件事觸發後自動呼叫;有哪些特性:有輸入輸出引數,可以宣

第二課:程式結構化定義函式

目標: 學會寫matlab指令碼。 編寫結構化程式。 編寫使用者自定義函式。 一、編寫matlab指令碼 MATLAB Script: 一個檔案包含一系列matlab命令 類似於c/c++程式 指令碼儲存為<file>.m檔案,這樣就可以執行這樣以.

連結定義函式名同名的庫函式

遇到一個問題: 封裝SQLite3成靜態庫,過程中發現SQLite3的原始碼的shell.c中有main函式: int SQLITE_CDECL main(int argc, char **argv){ char *zErrMsg = 0; She

JavaScript全域性函式定義函式-Functions

全域性屬性和函式可用於所有內建的 JavaScript 物件。我們經常會用到一些內建的全域性函式如parseInt();parseFloat()等等,另外我們可以根據自己的業務需要編寫自己的函式。 全域性函式 全域性物件描述 全域性物件是預定義的物件,作為 JavaS

初學mysql(十)-資料庫之儲存過程函式遊標-定義函式和流程控制(下)

上一篇部落格講了儲存過程、函式、以及遊標,這一篇部落格接著上一篇部落格來說。首先說說mysql資料庫中的流程控制及自定義函式的使用。 自定義函式: 根據所需要的功能,使用流程控制來完成所需要的功能,完成功能的程式碼就稱為自定義函式。要想完成自定義函式就必須學會流程控制的使

學會使用MySQL定義函式儲存過程

一、快速瞭解什麼是儲存過程和函式?   儲存過程和函式是事先經過編譯並存儲在資料庫中的一段 SQL 語句的集合,呼叫儲存過程 和函式可以簡化應用開發人員的很多工作,減少資料在資料庫和應用伺服器之間的傳輸,對 於提高資料處理的效率是有好處的。   在對儲存過程或函式進行操作時,需要

MySQL定義函式儲存過程區別

  自定義函式和儲存過程的區別: 1)一般來說,儲存過程實現的功能要複雜一點,而函式的實現的功能針對性比較強。儲存過程,功能強大,可以執行包括修改表等一系列資料庫操作;使用者定義函式不能用於執行一組修改全域性資料庫狀態的操作。 2)對於儲存過程來說可以返回引數,如記錄集,而函式只能返回值或者表物件。函式只能

MySql 定義函式,儲存過程,遊標的使用

首先整理一下mysql內建的一些函式 MySQL內建函式 一、字元函式 (1)CONCAT()//字元連線 (2)CONCAT_WS()//使用指定的分隔符進行字元連線 (3)FORMAT()//數字格式化 (4)LOWER()//轉化小寫 (

MySQL 第八篇:定義函式儲存過程、遊標

本篇內容由猿道教育的課程內容整理而來。 我把MySQL的內容整理成9篇部落格,學完這9篇部落格雖不能說能成為大神,但是應付一般中小企業的開發已經足夠了,有疑問或建議的歡迎留言討論。 自定義函式 一、函式的概念與定義 1、理解函式 函式可以看作是

儲存過程使用者定義函式(SQL SERVER)

聯絡 二者本質上沒有什麼區別。當儲存過程和函式被執行的時候,SQL Manager會到procedure cache中去取相應的查詢語句,如果在procedure cache裡沒有相應的查詢語句,SQL Manager就會對儲存過程和函式進行編譯。Pr

SQl中的UDF(使用者定義函式)儲存過程區別、優點

UDF定義: 和儲存過程很類似,使用者自定義函式是一組有序的T_SQL語句,這些語句被預先優化和編譯,並且可以作為一個單元來進行呼叫。UDF和儲存過程的主要區別在於結果的返回方式。為了能支援多種的不同的返回值,UDF比儲存過程有更多的限制。 UDF和儲存過程的具體區別: 儲

MySQL儲存過程定義函式、Navicat for mysql、建立儲存過程函式、呼叫儲存過程函式區別

與你相遇 好幸運  可我已失去為你淚流滿面的權利  但願在我看不到的天際  你張開了雙翼 1 MySQL儲存過程和函式 過程和函式,它們被編譯後儲存在資料庫中,稱為永續性儲存模組(Persistent Stored Module,PSM),可以反覆呼叫,執行速度快。 1.1 儲存過程 儲存過程是由

MySQL利用定義函式儲存過程建立海量表,並使用索引優化

昨天學習韓順平老師的視訊時明白了上一章explain的意義,為了自己的聯絡,我學著建立了一個海量表,供自己練習使用。 程式碼如下: #建立表DEPT CREATE TABLE dept( /*部門表*/ deptno MEDIUMINT UN

MySQL觸發器、儲存過程定義函式、檢視 常用SQL

1.建立一個userinfo表新增記錄時的觸發器 將新增日誌加入到userinfolog 2.建立一個向userinfo表新增記錄的儲存過程 3.根據userinfo表的出生日期欄位 我們將建立一個簡單算得年齡的自定義函式 4.建立一個userinfo的檢視 呼叫年齡函式

MySQL存儲過程/存儲過程定義函數的區別

toolbar 基本 value reg pan lba tin 進行 只為 ---------------------------存儲過程-------------------- 語法: 創建存儲過程: CREATE [definer = {user|current

儲存過程定義函式的優缺點

儲存過程和使用者定義函式都是“SQL語句組成的子程式,用以封裝程式碼以便重複使用”。但區別也是顯而易見的。簡單說,儲存過程功能強大,但呼叫不便,使用者函式正相反。 使用者定義函式的優點: 可以在SQL語句中呼叫,直接使用返值,從而形成複雜的SQL應用。 儲存過程則只能用ex

儲存過程、觸發器和使用者定義函式實驗 (儲存過程

儲存過程、觸發器和使用者自定義函式實驗 實驗內容一 練習教材中儲存過程、觸發器和使用者自定義函式的例子。教材中的BookSales資料庫,在群共享中,檔名為BookSales.bak。 實驗內容二 針對附件1中的教學活動資料庫,完成下面的實驗內容。 1、儲存過程 (

Hive中建立和呼叫儲存過程定義函式

前面的文章《在Hive中實現儲存過程–HQL/SQL》中介紹瞭如何使用HPL/SQL在Hive中實現儲存過程,執行類似Oracle PL/SQL的功能。 一般的業務場景是資料開發人員開發好一個儲存過程,然後週期性的呼叫,傳入不同的引數即可。 本文繼續介紹如何在Hive中利

oracle儲存過程定義函式(儲存函式)初學

1.儲存過程和儲存函式的主要區別       儲存函式可以通過return返回函式值;儲存函式可以在SQL語句內部呼叫;儲存函式較儲存過程有諸多限制;儲存過程用select語句返回記錄集,儲存函式使用表變數返回記錄集。 2.儲存過程和儲存函式的建立        儲存過程的