mysql 觸發(fā)器 函數(shù) 存儲過程之(函數(shù))

因為以前沒有寫blog的習慣,之前的mysql知識也就沒記錄,正好現(xiàn)在又用到mysql的函數(shù),所以就立即記錄下吧!

區(qū)別

觸發(fā)器 是在insert update之后執(zhí)行sql命令,不需要任何參數(shù)和返回值

函數(shù)和存儲過程類似,
區(qū)別:

  • 一般來說函數(shù)都是返回一個值或者表對象,返回多個值最好用存儲過程
  • 存儲過程一般是作為一個獨立的部分來執(zhí)行( EXECUTE 語句執(zhí)行),而函數(shù)可以作為查詢語句的一個部分來調(diào)用(SELECT調(diào)用),由于函數(shù)可以返回一個表對象,因此它可以在查詢語句中位于FROM關鍵字的后面。 SQL語句中不可用存儲過程,而可以使用函數(shù)。
  • 一般來說,存儲過程實現(xiàn)的功能要復雜一點,而函數(shù)的實現(xiàn)的功能針對性比較強。存儲過程,功能強大,可以執(zhí)行包括修改表等一系列數(shù)據(jù)庫操作;用戶定義函數(shù)不能用于執(zhí)行一組修改全局數(shù)據(jù)庫狀態(tài)的操作。
查看數(shù)據(jù)庫中的存儲過程和函數(shù)
show procedure status; //存儲過程
show function status;     //函數(shù)
查看存儲過程或函數(shù)的創(chuàng)建代碼
show create procedure proc_name;
show create function func_name;
查看視圖
SELECT * from information_schema.VIEWS   //視圖

SELECT * from information_schema.TABLES   //表
刪除自定義方法
drop function isRead

isRead是方法名

自己寫的一個demo

目的是查詢我的房間在某年某個月份是否已經(jīng)交過電費,返回結果0/1,
寫法有點類似js的function

delimiter $$
CREATE FUNCTION isRead(in_meterTime INT,in_year Varchar(255),in_roomId INT) RETURNS int(1)  
BEGIN  
DECLARE i INT ; 
    select count(1) INTO i from (
        select distinct id from t_room where id in (select room_table_id from t_electric_meter where dfsjd_code =  in_meterTime and year = in_year and deleted = 0 )
    )t where id = in_roomId;
RETURN i;
END$$
說明

“DELIMITER $$”語句的作用是將MYSQL的結束符設置為$$,因為MYSQL默認的語句結束符為分號;所以這樣設置才不會沖突

  • 1、定義變量

DECLARE var_name[,varname]...date_type[DEFAULT VALUE];

var_name為局部變量的名稱
。DEFAULT VALUE子句給變量提供一個默認值。值除了可以被聲明為一個常數(shù)外,還可以被指定為一個表達式。
如果沒有DEFAULT子句,初始值為NULL

DECLARE MYPARAM INT DEFAULT 100;
  • 2、為變量賦值

定義變量之后,為變量賦值可以改變變量的默認值,MYSQL中使用SET語句為變量賦值

SET var_name=expr[,var_name=expr]...

聲明3個變量,分別為var1,var2和var3

DECLARE var1,var2,var3 INT;
SET var1=10,var2=20;
SET var3=var1+var2;

MYSQL中還可以通過SELECT...INTO為一個或多個變量賦值(我的例子中就是用的這個)
eg:

DECLARE NAME CHAR(50);
DECLARE id DECIMAL(8,2);
SELECT id,NAME INTO id ,NAME FROM t3 WHERE id=2;
最后編輯于
?著作權歸作者所有,轉載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內(nèi)容

  • 《ijs》速成開發(fā)手冊3.0 官方用戶交流:iApp開發(fā)交流(1) 239547050iApp開發(fā)交流(2) 10...
    葉染柒丶閱讀 5,641評論 0 7
  • 轉載自這里 存儲過程簡介 我們常用的操作數(shù)據(jù)庫語言SQL語句在執(zhí)行的時候需要要先編譯,然后執(zhí)行,而存儲過程(Sto...
    杜七閱讀 2,470評論 4 27
  • 原文鏈接 MySQL存儲過程詳解 1.存儲過程簡介 我們常用的操作數(shù)據(jù)庫語言SQL語句在執(zhí)行的時候需要要先編譯,然...
    亞斯咪妮閱讀 2,723評論 1 30
  • 1. Java基礎部分 基礎部分的順序:基本語法,類相關的語法,內(nèi)部類的語法,繼承相關的語法,異常的語法,線程的語...
    子非魚_t_閱讀 34,671評論 18 399
  • wanggs閱讀 249評論 0 0

友情鏈接更多精彩內(nèi)容