因?yàn)橐郧皼]有寫blog的習(xí)慣取董,之前的mysql知識(shí)也就沒記錄,正好現(xiàn)在又用到mysql的函數(shù),所以就立即記錄下吧!
區(qū)別
觸發(fā)器 是在insert update之后執(zhí)行sql命令潦蝇,不需要任何參數(shù)和返回值
函數(shù)和存儲(chǔ)過程類似,
區(qū)別:
- 一般來說函數(shù)都是返回一個(gè)值或者表對象喘漏,返回多個(gè)值最好用存儲(chǔ)過程
- 存儲(chǔ)過程一般是作為一個(gè)獨(dú)立的部分來執(zhí)行( EXECUTE 語句執(zhí)行)护蝶,而函數(shù)可以作為查詢語句的一個(gè)部分來調(diào)用(SELECT調(diào)用),由于函數(shù)可以返回一個(gè)表對象翩迈,因此它可以在查詢語句中位于FROM關(guān)鍵字的后面持灰。 SQL語句中不可用存儲(chǔ)過程,而可以使用函數(shù)负饲。
- 一般來說堤魁,存儲(chǔ)過程實(shí)現(xiàn)的功能要復(fù)雜一點(diǎn),而函數(shù)的實(shí)現(xiàn)的功能針對性比較強(qiáng)返十。存儲(chǔ)過程妥泉,功能強(qiáng)大,可以執(zhí)行包括修改表等一系列數(shù)據(jù)庫操作洞坑;用戶定義函數(shù)不能用于執(zhí)行一組修改全局?jǐn)?shù)據(jù)庫狀態(tài)的操作盲链。
查看數(shù)據(jù)庫中的存儲(chǔ)過程和函數(shù)
show procedure status; //存儲(chǔ)過程
show function status; //函數(shù)
查看存儲(chǔ)過程或函數(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是方法名
自己寫的一個(gè)demo
目的是查詢我的房間在某年某個(gè)月份是否已經(jīng)交過電費(fèi),返回結(jié)果0/1,
寫法有點(diǎn)類似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的結(jié)束符設(shè)置為$$,因?yàn)镸YSQL默認(rèn)的語句結(jié)束符為分號(hào);所以這樣設(shè)置才不會(huì)沖突
- 1刽沾、定義變量
DECLARE var_name[,varname]...date_type[DEFAULT VALUE];
var_name為局部變量的名稱
本慕。DEFAULT VALUE子句給變量提供一個(gè)默認(rèn)值。值除了可以被聲明為一個(gè)常數(shù)外侧漓,還可以被指定為一個(gè)表達(dá)式锅尘。
如果沒有DEFAULT子句,初始值為NULL
DECLARE MYPARAM INT DEFAULT 100;
- 2布蔗、為變量賦值
定義變量之后藤违,為變量賦值可以改變變量的默認(rèn)值,MYSQL中使用SET語句為變量賦值
SET var_name=expr[,var_name=expr]...
聲明3個(gè)變量纵揍,分別為var1顿乒,var2和var3
DECLARE var1,var2,var3 INT;
SET var1=10,var2=20;
SET var3=var1+var2;
MYSQL中還可以通過SELECT...INTO為一個(gè)或多個(gè)變量賦值(我的例子中就是用的這個(gè))
eg:
DECLARE NAME CHAR(50);
DECLARE id DECIMAL(8,2);
SELECT id,NAME INTO id ,NAME FROM t3 WHERE id=2;