真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

MySQL中存儲函數(shù)、觸發(fā)器的示例分析

這篇文章主要介紹了MySQL中存儲函數(shù)、觸發(fā)器的示例分析,具有一定借鑒價值,感興趣的朋友可以參考下,希望大家閱讀完這篇文章之后大有收獲,下面讓小編帶著大家一起了解一下。

創(chuàng)新互聯(lián)專注于松嶺企業(yè)網(wǎng)站建設(shè),響應(yīng)式網(wǎng)站建設(shè),商城建設(shè)。松嶺網(wǎng)站建設(shè)公司,為松嶺等地區(qū)提供建站服務(wù)。全流程按需定制,專業(yè)設(shè)計,全程項目跟蹤,創(chuàng)新互聯(lián)專業(yè)和態(tài)度為您提供的服務(wù)

 
創(chuàng)建函數(shù):
 
1. 存儲函數(shù)也是過程式對象之一,與存儲過程很相似。
 
它們都是由SQL和過程式語句組成的代碼片斷,并且可以從應(yīng)用程序和SQL中調(diào)用。然而,它們也有一些區(qū)別:
 
(1)存儲函數(shù)不能擁有輸出參數(shù),因為存儲函數(shù)本身就是輸出參數(shù);
  www.2cto.com  
(2)不能用CALL語句來調(diào)用存儲函數(shù);
 
(3)存儲函數(shù)必須包含一條RETURN語句,而這條特殊的SQL語句不允許包含于存儲過程中。
 
2.創(chuàng)建存儲函數(shù)使用CREATEFUNCTION語句。
 
要查看中有哪些存儲函數(shù),可以使用show function satus命令(與存儲過程類似)。CREATE function語法格式:
 
CREATE FUNCTION sp_name ([func_parameter[,...]])
 
   returns type
 
   [characteristic ...] routine_body
 
說明:存儲函數(shù)的定義格式和存儲過程相差不大。
 
●   sp_name是存儲函數(shù)的名稱。存儲函數(shù)不能擁有與存儲過程相同的名字。
 
●  func_parameter是存儲函數(shù)的參數(shù),參數(shù)只有名稱和類型,不能指定IN、OUT和INOUT。RETURNS type子句聲明函數(shù)返回值的數(shù)據(jù)類型。
 
●  routine_body是存儲函數(shù)的主體,也叫存儲函數(shù)體,所有在存儲過程中使用的SQL語句在存儲函數(shù)中也適用,包括流程控制語句、游標(biāo)等。但是存儲函數(shù)體中必須包含一個RETURN value語句,value為存儲函數(shù)的返回值。這是存儲過程體中沒有的。
 
例1: 創(chuàng)建一個存儲函數(shù),它返回XS表中學(xué)生的數(shù)目作為結(jié)果。
  www.2cto.com  
DELIMITER $$
 
CREATE FUNCTION NUM_OF_XS()
 
RETURNS INTEGER
 
BEGIN
 
   RETURN (SELECT COUNT(*)FROM XS);
 
END$$
 
DELIMITER ;
 
例2: 創(chuàng)建一個存儲函數(shù)來刪除XS_KC表中有但XS表中不存在的學(xué)號。
 
DELIMITER $$
 
CREATE FUNCTION DELETE_STU(XH CHAR(6))
 
  RETURNS BOOLEAN
 
BEGIN
 
DECLARE STU CHAR(6);
 
SELECT 姓名 INTO STU FROM XS WHERE 學(xué)號=XH;
 
IF STU IS NULL THEN
 
    DELETE FROM XS_KCWHERE 學(xué)號=XH;
 
    RETURN TRUE;
 
ELSE
 
    RETURN FALSE;
  www.2cto.com  
END IF;
 
END$$
 
DELIMITER ;
 
3.  調(diào)用創(chuàng)建的函數(shù)
 
存儲函數(shù)創(chuàng)建完后,就如同系統(tǒng)提供的內(nèi)置函數(shù)(如version()),所以調(diào)用存儲函數(shù)的方法也差不多,都是使用SELECT關(guān)鍵字。
 
語法格式為: SELECT sp_name ([func_parameter[,...]])
 
例: 調(diào)用例1中的存儲函數(shù)?。篠ELECT NUM_OF_XS();
 
存儲函數(shù)中還可以調(diào)用另外一個存儲函數(shù)或者存儲過程。
 
例:創(chuàng)建一個存儲函數(shù),通過調(diào)用存儲函數(shù)NAME_OF_STU獲得學(xué)號的姓名,判斷姓名是否是“王林”,是則返回王林的出生日期,不是則返回“FALSE”。
 
DELIMITER $$
 
CREATE FUNCTION IS_STU(XH CHAR(6))
 
RETURNS CHAR(10)
 
BEGIN
 
DECLARE NAME CHAR(8);
 
SELECT NAME_OF_STU(XH)INTO NAME;
 
IF NAME= '王林'  THEN
 
    RETURN(SELECT 出生日期 FROM XS WHERE 學(xué)號=XH);
 
ELSE
 
    RETURN 'FALSE';
 
END IF;  www.2cto.com  
 
END$$
 
DELIMITER ;
 
4.  刪除與修改創(chuàng)建的函數(shù)
 
刪除存儲函數(shù)的方法與刪除存儲過程的方法基本一樣,都使用DROP FUNCTION語句。
 
語法格式為:  DROPFUNCTION [IF EXISTS] sp_name
 
例: 刪除例1中的存儲函數(shù)NUM_OF_XS。
 
DROP FUNCTION IF EXISTS NUM_OF_XS;
 
同樣也是使用ALTER FUNCTION語句可以修改存儲函數(shù)的特征。
 
語法格式為: ALTER FUNCTION sp_name [characteristic ...]
 
當(dāng)然,要修改存儲函數(shù)的內(nèi)容則要采用先刪除后定義的方法。
 
觸發(fā)器
 
1.  創(chuàng)建觸發(fā)器
 
創(chuàng)建觸發(fā)器使用CREATEtrigger語句,要查看數(shù)據(jù)庫中有哪些觸發(fā)器可以使用show triggers命令。
 
CREATE TRIGGER語法格式:
 
CREATE TRIGGERtrigger_name trigger_time  trigger_event
 
   ON tbl_nameFOR EACH ROW  trigger_stmt
 
說明:
 
●   trigger_name:觸發(fā)器的名稱,觸發(fā)器在當(dāng)前數(shù)據(jù)庫中必須具有唯一的名稱。如果要在某個特定數(shù)據(jù)庫中創(chuàng)建,名稱前面應(yīng)該加上數(shù)據(jù)庫的名稱。
 
●  trigger_time:觸發(fā)器觸發(fā)的時刻,有兩個選項:AFTER和BEFORE,以表示觸發(fā)器是在激活它的語句之前或之后觸發(fā)。如果想要在激活觸發(fā)器的語句執(zhí)行之后執(zhí)行幾個或更多的改變,通常使用AFTER選項;如果想要驗證新數(shù)據(jù)是否滿足使用的限制,則使用BEFORE選項。在MySQL中區(qū)別不明顯,before跟after用法差不多。  www.2cto.com  
 
●  trigger_event:觸發(fā)事件,指明了激活觸發(fā)程序的語句的類型。trigger_event可以是下述值之一:
 
INSERT:將新行插入表時激活觸發(fā)器。例如,通過INSERT、LOAD DATA和REPLACE語句。
 
UPDATE:更改某一行時激活觸發(fā)器。例如,通過UPDATE語句。
 
DELETE:從表中刪除某一行時激活觸發(fā)器。例如,通過DELETE和REPLACE語句。
 
●  tbl_name:與觸發(fā)器相關(guān)的表名,在該表上發(fā)生觸發(fā)事件才會激活觸發(fā)器。同一個表不能擁有兩個具有相同觸發(fā)時刻和事件的觸發(fā)器。例如,對于某一表,不能有兩個BEFORE UPDATE觸發(fā)器,但可以有1個BEFORE UPDATE觸發(fā)器和1個BEFOREINSERT觸發(fā)器,或1個BEFORE UPDATE觸發(fā)器和1個AFTER UPDATE觸發(fā)器。
 
●  FOR EACH ROW:這個聲明用來指定,對于受觸發(fā)事件影響的每一行,都要激活觸發(fā)器的動作。例如,使用一條語句向一個表中添加一組行,觸發(fā)器會對每一行執(zhí)行相應(yīng)觸發(fā)器動作。
 
● trigger_stmt:觸發(fā)器動作,包含觸發(fā)器激活時將要執(zhí)行的語句。如果要執(zhí)行多個語句,可使用BEGIN... END復(fù)合語句結(jié)構(gòu)。這樣,就能使用存儲過程中允許的相同語句。
 
注意:觸發(fā)器不能返回任何結(jié)果到客戶端,為了阻止從觸發(fā)器返回結(jié)果,不要在觸發(fā)器定義中包含SELECT語句。同樣,也不能調(diào)用將數(shù)據(jù)返回客戶端的存儲過程。
 
2.   new.列名、old.列名用法
 
在MySQL觸發(fā)器中的SQL語句可以關(guān)聯(lián)表中的任意列。但不能直接使用列的名稱去標(biāo)志,那會使系統(tǒng)混淆,因為激活觸發(fā)器的語句可能已經(jīng)修改、刪除或添加了新的列名,而列的舊名同時存在。因此必須用這樣的語法來標(biāo)志:“NEW.column_name”或者“OLD.column_name”。NEW.column_name用來引用新行的一列,OLD.column_name用來引用更新或刪除它之前的已有行的一列。
 
對于INSERT語句,只有NEW是合法的;對于DELETE語句,只有OLD才合法;而UPDATE語句可以與NEW或OLD同時使用。
 
例: 創(chuàng)建一個觸發(fā)器,當(dāng)刪除表XS中某個學(xué)生的信息時,同時將XS_KC表中與該學(xué)生有關(guān)的數(shù)據(jù)全部刪除。  www.2cto.com  
 
DELIMITER $$
 
CREATE TRIGGERXS_DELETE AFTER DELETE
 
   ON XS FOR EACH ROW
 
BEGIN
 
   DELETE FROM XS_KC WHERE學(xué)號=OLD.學(xué)號;
 
END$$
 
DELIMITER ;
 
現(xiàn)在驗證一下觸發(fā)器的功能:DELETE FROM XS WHERE學(xué)號='081101';
 
使用SELECT語句查看XS_KC表中的情況:SELECT * FROM XS_KC;
 
注意:當(dāng)觸發(fā)器涉及對觸發(fā)表自身的更新操作時,只能使用BEFORE,AFTER觸發(fā)器將不被允許。
 
3.刪除觸發(fā)器  www.2cto.com  
 
和其他數(shù)據(jù)庫對象一樣,使用DROP語句即可將觸發(fā)器從數(shù)據(jù)庫中刪除。語法格式:DROP TRIGGER[schema_name.]trigger_name
 
說明:trigger_name:指要刪除的觸發(fā)器名稱。schema_name為所在數(shù)據(jù)庫的名稱,如果在當(dāng)前數(shù)據(jù)庫,可以省略。
 
例: 刪除觸發(fā)器XS_DELETE:   DROP TRIGGERXS_DELETE;
 

感謝你能夠認(rèn)真閱讀完這篇文章,希望小編分享的“MySQL中存儲函數(shù)、觸發(fā)器的示例分析”這篇文章對大家有幫助,同時也希望大家多多支持創(chuàng)新互聯(lián),關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道,更多相關(guān)知識等著你來學(xué)習(xí)!


分享名稱:MySQL中存儲函數(shù)、觸發(fā)器的示例分析
分享地址:http://weahome.cn/article/ggddpd.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部