數(shù)據(jù)庫應用與數(shù)據(jù)分析(MySQL) 課件 項目六 MySQL數(shù)據(jù)庫中的程序設計_第1頁
數(shù)據(jù)庫應用與數(shù)據(jù)分析(MySQL) 課件 項目六 MySQL數(shù)據(jù)庫中的程序設計_第2頁
數(shù)據(jù)庫應用與數(shù)據(jù)分析(MySQL) 課件 項目六 MySQL數(shù)據(jù)庫中的程序設計_第3頁
數(shù)據(jù)庫應用與數(shù)據(jù)分析(MySQL) 課件 項目六 MySQL數(shù)據(jù)庫中的程序設計_第4頁
數(shù)據(jù)庫應用與數(shù)據(jù)分析(MySQL) 課件 項目六 MySQL數(shù)據(jù)庫中的程序設計_第5頁
已閱讀5頁,還剩40頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權,請進行舉報或認領

文檔簡介

項目六

MySQL數(shù)據(jù)庫中的程序設計《數(shù)據(jù)庫應用與數(shù)據(jù)分析(MySQL)》課程目標目錄CONTENTS任務1MySQL程序設計語法任務2存儲過程和自定義函數(shù)任務3創(chuàng)建和使用觸發(fā)器知識回顧項目六

MySQL數(shù)據(jù)庫中的程序設計課程目標項目六

MySQL數(shù)據(jù)庫中的程序設計知識目標:能力目標:素質(zhì)目標:掌握MySQL中程序設計語言的基礎要素熟練掌握MySQL內(nèi)置函數(shù)的使用理解程序流程控制語句三種結(jié)構的語法及其使用方法掌握存儲過程、觸發(fā)器的相關概念和應用場景具備編寫MySQL存儲過程和函數(shù)的能力具備應用程序流程控制語句常見結(jié)構的能力培養(yǎng)學習者的邏輯思維和分析問題與解決問題的能力激發(fā)學習者的主動探索精神,增強其創(chuàng)新意識和獨立思考能力項目六

MySQL數(shù)據(jù)庫中的程序設計任務1MySQL程序設計語法項目六

MySQL數(shù)據(jù)庫中的程序設計MySQL程序設計中會用到常量、變量和運算符,并通過分支語句、循環(huán)語句等控制語句來控制程序的執(zhí)行,以完成具體任務。本任務通過具體案例,幫助學習者掌握程序設計的基礎知識和程序控制語句,為學習更復雜的數(shù)據(jù)庫編程和數(shù)據(jù)處理奠定基礎。任務分析項目六

MySQL數(shù)據(jù)庫中的程序設計一、常量2.

數(shù)值常量直接表示數(shù)值的常量,包括整數(shù)和浮點數(shù),如整數(shù)123、浮點數(shù)3.14等。數(shù)值常量可以進行各種算術運算。3.

時間日期常量用單引號或雙引號括起來表示日期時間的字符串。如包含年月日的'2022-02-22',包含時間的'11:30:45'等。用單引號或雙引號括起來的字符序列,如'hello'、"world"。如果字符串中包含引號本身,需要使用轉(zhuǎn)義字符反斜杠“\”進行轉(zhuǎn)義,例如'It\'sabeautifulday.'。布爾常量是關系運算或邏輯運算的結(jié)果,只有兩個值:TRUE或FALSE。TRUE表示真,表示數(shù)值為1,F(xiàn)ALSE表示假,表示數(shù)值為0。常量指程序執(zhí)行過程中保持固定不變的值。1.

字符串常量4.

布爾常量【知識解析】項目六

MySQL數(shù)據(jù)庫中的程序設計二、變量變量是指程序運行過程中其值可以改變的量,變量是表達式中的基本元素。MySQL中的變量分為局部變量、用戶變量和系統(tǒng)變量。變量的生存周期【知識解析】項目六

MySQL數(shù)據(jù)庫中的程序設計二、變量【知識解析】01用戶變量用戶自己定義并使用的變量稱為用戶變量。用戶在用戶變量中保存值,然后在之后的語句中使用該值。用戶變量在使用前必須定義和初始化,如果使用沒有初始化的變量,其值為NULL。用戶變量與當前連接有關,用戶變量以“@”為前綴,表示為“@變量名”,以便于與字段名進行區(qū)別。變量名可以由字母、數(shù)字和下劃線組成,但不能以數(shù)字開頭,作用域為整個會話,在會話結(jié)束時自動釋放。(1)用SET語句定義和初始化用戶變量。SET@變量名1=變量值1[,@變量名2=變量值2,......];(2)查看用戶變量的值SELECT@變量名;項目六

MySQL數(shù)據(jù)庫中的程序設計二、變量【知識解析】01用戶變量用戶自己定義并使用的變量稱為用戶變量。用戶在用戶變量中保存值,然后在之后的語句中使用該值。用戶變量在使用前必須定義和初始化,如果使用沒有初始化的變量,其值為NULL。用戶變量與當前連接有關,用戶變量以“@”為前綴,表示為“@變量名”,以便于與字段名進行區(qū)別。變量名可以由字母、數(shù)字和下劃線組成,但不能以數(shù)字開頭,作用域為整個會話,在會話結(jié)束時自動釋放。(1)用SET語句定義和初始化用戶變量。SET@變量名1=變量值1[,@變量名2=變量值2,......];(2)查看用戶變量的值SELECT@變量名;項目六

MySQL數(shù)據(jù)庫中的程序設計【知識解析】02系統(tǒng)變量MYSQL中有一些特定的設置,當MYSQL服務器啟動的時候,這些設置被讀取出來,這些設置就是系統(tǒng)變量。

系統(tǒng)變量由MYSQL系統(tǒng)自動維護,用于配置服務器。系統(tǒng)變量包括“全局變量”“會話變量”,全局變量對服務中的所有連接有效,會影響整個服務器,而會話變量只對當前連接有效,不適用于其它連接。

系統(tǒng)變量一般以“@@”為前綴,某些特定系統(tǒng)變量可以省略“@@”,如系統(tǒng)版本號(VERSION)、系統(tǒng)日期(Current_Date)、系統(tǒng)時間(Current_Time)、當前用戶名(Current_User),這些系統(tǒng)變量值不可以改變,有些系統(tǒng)變量值可以進行修改。項目六

MySQL數(shù)據(jù)庫中的程序設計【知識解析】03局部變量

局部變量是可保存單個特定類型數(shù)據(jù)值的變量,在存儲過程和BEGIN...END中語句塊中使用。在語句塊執(zhí)行完畢后,局部變量就會被釋放。其它語句塊中不可以使用該局部變量。(1)使用DECLARE語句定義局部變量DECLARE變量名

數(shù)據(jù)類型[DEFAULT默認值];(2)給局部變量賦值SET變量名=變量值;(3)將查詢結(jié)果賦值給局部變量SELECT字段名INTO局部變量名FROM表名[WHERE條件表達式];項目六

MySQL數(shù)據(jù)庫中的程序設計【知識解析】項目六

MySQL數(shù)據(jù)庫中的程序設計變量類型作用域前綴默認值規(guī)則賦值語句示例局部變量BEGIN...END塊內(nèi)無必須顯式聲明默認值DECLAREvarINTDEFAULT0;用戶變量當前會話@默認為NULLSET@var='值';會話系統(tǒng)變量當前會話無繼承全局變量或配置文件SETSESSIONsort_buffer_size=1M;全局系統(tǒng)變量所有新會話無由配置文件或編譯選項決定SETGLOBALmax_connections=200;補充說明:局部變量需在存儲過程/函數(shù)中使用DECLARE聲明用戶變量通過SELECT@var可跨語句使用查看系統(tǒng)變量:SHOW[GLOBAL|SESSION]VARIABLESLIKE'var_name'變量對比表三、流程控制之條件分支語句IF...ELSE語句IF...ELSE語句根據(jù)邏輯表達式選擇性執(zhí)行代碼塊,THEN后接滿足條件的語句,可選ELSE處理否定情況,適用于簡單的條件判斷場景。項目六

MySQL數(shù)據(jù)庫中的程序設計IF條件表達式THEN語句1[ELSE語句2]ENDIF;【知識解析】條件:通常為條件表達式或邏輯表示式。[ELSE語句2]:可選項,語句2中還可以包含IF語句,形成IF語句的嵌套。ENDIF:IF語句的結(jié)束標志。三、流程控制之條件分支語句CASE語句CASE語句分為簡單CASE和搜索CASE兩種形式,簡單CASE按表達式值匹配,搜索CASE按布爾條件匹配,支持ELSE默認分支,適用于多分支條件判斷。項目六

MySQL數(shù)據(jù)庫中的程序設計簡單CASE語句將表達式與一組簡單表達式進行比較,以確定其結(jié)果。CASE表達式WHEN值1THEN語句1[WHEN值2THEN語句2]...[WHEN值NTHEN語句N][ELSE語句N+1]ENDCASE;【知識解析】搜索CASE語句用于計算一組條件表達式的值以確定其相應的操作:CASEWHEN條件表達式1THEN語句1[WHEN條件表達式2THEN語句2]...[WHEN條件表達式NTHEN語句N][ELSE語句N+1]ENDCASE;三、流程控制之循環(huán)語句WHILE循環(huán)WHILE循環(huán)先判斷條件,條件為真時執(zhí)行循環(huán)體,適合已知條件的場景,如循環(huán)處理一組數(shù)據(jù),直到滿足特定條件為止。REPEAT循環(huán)REPEAT循環(huán)先執(zhí)行循環(huán)體,再判斷UNTIL條件,至少執(zhí)行一次,適用于需要至少執(zhí)行一次的循環(huán)場景,如日期遍歷。LOOP循環(huán)LOOP循環(huán)需配合LEAVE語句手動退出,適用于復雜的循環(huán)邏輯,如嵌套循環(huán)或多出口控制,提供更大的靈活性。項目六

MySQL數(shù)據(jù)庫中的程序設計[標簽名:]WHILE條件表達式DO

循環(huán)體ENDWHILE[標簽名];[標簽名:]REPEAT循環(huán)體UNTIL條件表達式ENDREPEAT[標簽名];[標簽名:]LOOP循環(huán)體ENDLOOP[標簽名];【知識解析】任務操作1:使用局部變量計算任務要求:

使用SQL語句,通過局部變量計算“商品”表中所有商品的平均庫存數(shù)量,并顯示結(jié)果。

主要SQL語句:SET@avg_stock=0;SELECTAVG(庫存數(shù)量)INTO@avg_stockFROM商品;SELECT@avg_stockAS平均庫存數(shù)量;【任務操作】項目六

MySQL數(shù)據(jù)庫中的程序設計任務操作2:使用用戶自定義變量任務要求:

使用SQL語句,通過用戶定義變量和表達式計算指定訂單的處理時間(從訂單創(chuàng)建日期到當前日期的天數(shù)),并將結(jié)果存儲到一個用戶定義變量中。主要SQL語句:SET@order_id=1;SET@processing_time=0;SELECTDATEDIFF(CURDATE(),銷售時間)INTO@processing_timeFROM銷售記錄WHERE銷售編號=@order_id;SELECT@processing_timeAS處理時間;【任務操作】項目六

MySQL數(shù)據(jù)庫中的程序設計任務操作3:使用條件分支語句任務要求:

使用SQL語句判斷“銷售記錄”表中銷售單價值是否大于或等于1000,如果是則打九折,否則不打折,顯示原銷售單價和折后單價。主要SQL語句:SELECT

銷售單價,CASEWHEN銷售單價>=1000THEN銷售單價*0.9ELSE銷售單價ENDAS折后單價FROM銷售記錄;【任務操作】項目六

MySQL數(shù)據(jù)庫中的程序設計任務2存儲過程和自定義函數(shù)項目六

MySQL數(shù)據(jù)庫中的程序設計

存儲過程和自定義函數(shù)是數(shù)據(jù)庫中定義的一些能夠?qū)崿F(xiàn)特定功能與操作的SQL語句的集合,這些語句經(jīng)過編譯后被作為整體存儲于數(shù)據(jù)庫服務器中,需要時則可以通過專門的語句或者其他應用程序來調(diào)用。任務分析項目六

MySQL數(shù)據(jù)庫中的程序設計一、存儲過程概念與優(yōu)點項目六

MySQL數(shù)據(jù)庫中的程序設計【知識解析】存儲過程的概念存儲過程是一個完成特定功能與操作的SQL語句的集合,通過存儲過程可以將完成特定功能的SQL語句封裝起來,根據(jù)需要可以多次調(diào)用,避免重復編寫相同的語句。存儲過程經(jīng)編譯后保存在數(shù)據(jù)庫中,因此執(zhí)行效率更高。存儲過程的優(yōu)點(1)執(zhí)行速度快;(2)可以使數(shù)據(jù)獨立:(3)有很強的靈活性:(4)提高安全性;0102二、創(chuàng)建與調(diào)用存儲過程創(chuàng)建存儲過程使用CREATEPROCEDURE定義存儲過程,參數(shù)列表需注明方向與數(shù)據(jù)類型,過程體置于BEGIN...END中,支持復雜邏輯。調(diào)用存儲過程通過CALL語句調(diào)用存儲過程,傳遞實參,支持獲取OUT參數(shù)返回值,實現(xiàn)業(yè)務邏輯的封裝和復用。項目六

MySQL數(shù)據(jù)庫中的程序設計【知識解析】CREATEPROCEDURE存儲過程名([參數(shù)列表])過程體;CALL存儲過程名([參數(shù)列表]);三、存儲過程的管理查看存儲過程SHOWPROCEDURESTATUS[LIKE‘存儲過程名’];[LIKE‘存儲過程名’]:可選項,用來匹配存儲過程的名稱,LIKE不能省略。修改存儲過程可以使用ALTER語句修改存儲過程的某些特征,不能修改存儲過程的內(nèi)容,如果要修改存儲過程的內(nèi)容,只能刪除該存儲過程并重新進行創(chuàng)建。刪除存儲過程DROPPROCEDURE[IFEXISTS]存儲過程名;項目六

MySQL數(shù)據(jù)庫中的程序設計【知識解析】SHOWCREATEPROCEDURE存儲過程名;ALTERPROCEDURE存儲過程名[存儲過程的特征];[IFEXISTS]:可選項,此參數(shù)在執(zhí)行刪除操作時,先判斷該存儲過程是否存在:如果存在,直接刪除;如果不存在,刪除操作也不會報錯,可以避免系統(tǒng)錯誤。四、自定義函數(shù)1創(chuàng)建自定義函數(shù)使用CREATEFUNCTION定義自定義函數(shù),必須聲明RETURNS類型且函數(shù)體包含RETURN語句,支持單一值返回。2函數(shù)特點自定義函數(shù)不支持OUT參數(shù),但可在SQL語句中直接調(diào)用,實現(xiàn)表達式級復用,適用于簡單的業(yè)務邏輯計算。3函數(shù)的調(diào)用項目六

MySQL數(shù)據(jù)庫中的程序設計【知識解析】CREATEFUNCTION函數(shù)名[(參數(shù)列表)]RETURNS返回值類型函數(shù)體;自定義函數(shù)的調(diào)用不能使用CALL語句,使用SELECT調(diào)用。SELECT函數(shù)名([參數(shù)]);對自定義函數(shù)的查看、修改、刪除等操作與存儲過程類似。項目六

MySQL數(shù)據(jù)庫中的程序設計【知識解析】存儲過程和函數(shù)的對比表對比維度??存儲過程(StoredProcedure)??函數(shù)(Function)??返回值特性?可返回多個值(通過OUT/INOUT參數(shù))或結(jié)果集必須返回單一值(標量或表對象)?調(diào)用方式?獨立調(diào)用:CALLproc_name()嵌入SQL語句:SELECTfunc_name()?參數(shù)類型?支持IN、OUT、INOUT三種參數(shù)類型僅支持IN參數(shù)(輸入?yún)?shù))?事務控制?支持完整事務(COMMIT/ROLLBACK)禁止事務操作?數(shù)據(jù)庫操作權限?允許執(zhí)行DDL/DML(增刪改表結(jié)構及數(shù)據(jù))禁止修改數(shù)據(jù)庫狀態(tài)(只讀計算)?確定性要求?可非確定性(相同輸入可能不同輸出)通常需聲明DETERMINISTIC(相同輸入必得相同輸出)?觸發(fā)器支持??不可在觸發(fā)器中直接調(diào)用?可在觸發(fā)器中調(diào)用?典型應用場景?批量數(shù)據(jù)處理、業(yè)務規(guī)則封裝、數(shù)據(jù)庫維護任務數(shù)據(jù)轉(zhuǎn)換、計算字段、查詢條件優(yōu)化五、注釋符與定界符1注釋符MySQL支持#、--與/**/三種注釋,推薦在復雜過程與函數(shù)中使用多行注釋說明參數(shù)、返回值與業(yè)務邏輯,提升代碼可讀性。項目六

MySQL數(shù)據(jù)庫中的程序設計【知識解析】(1)“#注釋內(nèi)容”:單行注釋,#后直接跟注釋內(nèi)容。(2)“--注釋內(nèi)容”:單選注釋,--(空格)后面跟注釋內(nèi)容。(3)“/*注釋內(nèi)容*/:多行注釋,/*在注釋內(nèi)容的開頭,*/在注釋內(nèi)容的結(jié)尾,中間為注釋內(nèi)容。五、注釋符與定界符2定界符使用項目六

MySQL數(shù)據(jù)庫中的程序設計【知識解析】MYSQL中語句的默認結(jié)束符為半角分號(;),在命令行中,一行語句以分號結(jié)束,命令會立即執(zhí)行,但在創(chuàng)建存儲過程或自定義函數(shù)時,需要編輯多條語句而不立即執(zhí)行,因此可以將結(jié)束符先修改為其它符號,存儲過程或自定義函數(shù)結(jié)束再將結(jié)束符恢復。修改結(jié)束符的語法格式如下:DELIMITER自定義的結(jié)束符;自定義的結(jié)束符可以使用一些特殊的符號,通常使用“//”、“$$”、“##”等。存儲過程或自定義函數(shù)語句完成后,將結(jié)束符恢復為分號:DELIMITER;任務操作1:創(chuàng)建過程并調(diào)用【任務操作】項目六

MySQL數(shù)據(jù)庫中的程序設計DELIMITER//CREATEPROCEDUREPROC001()BEGIN

DECLAREnum1INTDEFAULT0;

SELECTCOUNT(*)INTOnum1FROM銷售記錄

WHERE商品編號='501002';

IFnum1>0THEN

SELECTnum1AS銷售記錄數(shù),'有銷售'AS銷售情況;

ELSE

SELECT0AS銷售記錄數(shù),'沒有銷售'AS銷售情況;

ENDIF;END//DELIMITER;--調(diào)用存儲過程:CALLPROC001();任務要求:

使用SQL語句創(chuàng)建存儲過程PROC001,功能是從“銷售記錄”表中查看商品編號為“501002”的商品是否有銷售記錄。如果有銷售記錄,顯示銷售記錄數(shù)和“有銷售”;如果沒有銷售,銷售記錄數(shù)為0,并顯示“沒有銷售”主要SQL語句:任務操作2:創(chuàng)建自定義函數(shù)使用任務要求:

使用SQL語句創(chuàng)建自定義函數(shù),根據(jù)“客戶表”中的積分情況對客戶進行等級分類,大于10000為鉆石,大于8000為鉑金,大于6000為黃金,大于4000為白銀,低于4000為青銅,調(diào)用函數(shù),顯示客戶的等級。主要SQL語句:DELIMITER//CREATEFUNCTIONdengji(in_bianhaoCHAR(5))RETURNSVARCHAR(20)DETERMINISTICBEGIN

DECLAREv_pointsINTDEFAULT0;

SELECT積分INTOv_pointsFROM客戶WHERE客戶編號=in_bianhao;

IFv_pointsISNULLTHEN

SETv_points=0;

ENDIF;【任務操作】項目六

MySQL數(shù)據(jù)庫中的程序設計--確定積極等級

RETURNCASE

WHENv_points>=10000THEN'鉆石'

WHENv_points>=8000THEN'鉑金'

WHENv_points>=6000THEN'黃金'

WHENv_points>=4000THEN'白銀'

ELSE'青銅'

END;

END//DELIMITER;任務操作3:存儲過程的應用任務要求:

使用SQL語句創(chuàng)建存儲過程,使用WHILE循環(huán)計算“銷售記錄”表中從指定日期到當前日期的累計銷售額,并顯示出來。主要SQL語句:DELIMITER//DROPPROCEDUREIFEXISTSCalculateSales;CREATEPROCEDURECalculateSales(INstart_dateDATE)BEGIN

--聲明變量必須放在存儲過程的開頭

DECLAREcur_dateDATE;

DECLAREtotal_salesDECIMAL(10,2)DEFAULT0.00;

DECLAREsale_amountDECIMAL(10,2);

--初始化當前日期為開始日期

SETcur_date=start_date;

--使用WHILE循環(huán)遍歷每一天

WHILEcur_date<=CURDATE()DO

--查詢當天的銷售金額

【任務操作】項目六

MySQL數(shù)據(jù)庫中的程序設計

SELECTSUM(銷售單價*數(shù)量)INTOsale_amount

FROM銷售記錄

WHERE銷售時間=cur_date;

--如果當天有銷售記錄,則累加到總銷售額

IFsale_amountISNOTNULLTHEN

SETtotal_sales=total_sales+sale_amount;

ENDIF;

--日期加1天

SETcur_date=DATE_ADD(cur_date,INTERVAL1DAY);

ENDWHILE;

--輸出累計銷售額

SELECTtotal_salesAS累計銷售額;END//DELIMITER;--調(diào)用存儲過程:CALLCalculateSales('2022-01-01');任務3創(chuàng)建和使用觸發(fā)器項目六

MySQL數(shù)據(jù)庫中的程序設計任務分析觸發(fā)器是由事件來觸發(fā)某個操作,這些事件包括INSERT語句,UPDATE語句和DELETE語句。當數(shù)據(jù)庫系統(tǒng)執(zhí)行這些事件時,就會激活觸發(fā)器,執(zhí)行相應的操作,使用觸發(fā)器可對表實施復雜的完整性約束,保持數(shù)據(jù)的一致性。本任務通過案例,讓學生掌握MySQL中的觸發(fā)器的創(chuàng)建和使用方法。【知識解析】一、觸發(fā)器概述項目六

MySQL數(shù)據(jù)庫中的程序設計【知識解析】

觸發(fā)器是一種特殊的存儲過程,它與數(shù)據(jù)表緊密相連,用于對數(shù)據(jù)表實施完整性約束。觸發(fā)器中包含了一系列SQL語句,用來執(zhí)行相應的操作,從而確保數(shù)據(jù)的完整性。觸發(fā)器建立在觸發(fā)事件上,對數(shù)據(jù)表執(zhí)行Insert、Update或者Delete等操作時,MySQL就會自動執(zhí)行建立在這些操作上的觸發(fā)器。

觸發(fā)器的調(diào)用和存儲過程不一樣,觸發(fā)器只能由數(shù)據(jù)庫的特定事件來觸發(fā),并且不能接收參數(shù),當滿足觸發(fā)器的觸發(fā)條件時,就會執(zhí)行觸發(fā)器中定義的程序語句。觸發(fā)時機\DML操作INSERT(新增)UPDATE(修改)DELETE(刪除)BEFOREBEFOREINSERTBEFOREUPDATEBEFOREDELETEAFTERAFTERINSERTAFTERUPDATEAFTERDELETE二、觸發(fā)器的特點01當在表上執(zhí)行指定操作時,觸發(fā)器會自動激活。02觸發(fā)器與特定的表相關聯(lián),并且只能在該表上定義的觸發(fā)事件上激活。03觸發(fā)器可以包含復雜的SQL語句,這些語句可以執(zhí)行數(shù)據(jù)驗證、更新其他表等。04觸發(fā)器可以在事件之前(BEFORE)或之后(AFTER)激活。項目六

MySQL數(shù)據(jù)庫中的程序設計【知識解析】自動執(zhí)行與表關聯(lián)復雜邏輯定義觸發(fā)時間05觸發(fā)時間INSERT、UPDATE、DELETE執(zhí)行前后,共6種觸發(fā)事件。三、

觸發(fā)器的使用場景1.數(shù)據(jù)驗證:在插入或更新數(shù)據(jù)時,自動驗證數(shù)據(jù)的合法性。5.權限控制:根據(jù)特定條件,自動限制數(shù)據(jù)的插入、更新或刪除。觸發(fā)器一般以下場景中使用。2.自動更新字段:如自動填充創(chuàng)建時間、更新時間等字段。4.級聯(lián)更新:在更新某個表的數(shù)據(jù)時,自動更新相關聯(lián)的表。3.記錄日志:在數(shù)據(jù)變更時,自動記錄變更日志。項目六

MySQL數(shù)據(jù)庫中的程序設計【知識解析】四、創(chuàng)建觸發(fā)器項目六

MySQL數(shù)據(jù)庫中的程序設計創(chuàng)建一個觸發(fā)器,當觸發(fā)事件發(fā)生時,執(zhí)行應用的語句。語法格式如下:CREATETRIGGER觸發(fā)器名

觸發(fā)時機

觸發(fā)事件ON表名FOREACHROW執(zhí)行語句;語句說明:(1)觸發(fā)器名:創(chuàng)建的觸發(fā)器的名稱,在當前數(shù)據(jù)庫中是唯一的。(2)觸發(fā)時機:BEFORE或AFTER,表示觸發(fā)器在操作之前或之后執(zhí)行。(3)觸發(fā)事件:INSERT、UPDATE或DELETE,表示觸發(fā)器在哪些操作上觸發(fā)。(4)FOREACHROW:表示數(shù)據(jù)表中任意一條記錄滿足觸發(fā)事件都會激活觸發(fā)器。(5)執(zhí)行語句:觸發(fā)器激活后將要執(zhí)行的程序語句,如果是多條語句可以使用BEGIN...END復合語句?!局R解析】五、管理觸發(fā)器01查看觸發(fā)器查看觸發(fā)器是指查看數(shù)據(jù)庫中已經(jīng)存在的觸發(fā)器以及觸發(fā)器的定義、狀態(tài)和語法等信息,語法格式如下:SHOWTRIGGERS;只能查看所有觸發(fā)器的信息,不能查看指定觸發(fā)器的信息02刪除觸發(fā)器可以將數(shù)據(jù)庫中已經(jīng)存在的觸發(fā)器刪除,語法格式如下:DROPTRIGGER觸發(fā)器名;項目六

MySQL數(shù)據(jù)庫中的程序設計【知識解析】任務操作1:創(chuàng)建AFTERINSERT觸發(fā)器【任務操作】項目六

MySQL數(shù)據(jù)庫中的程序設計DELIMITER//DROPTRIGGERIFEXISTSsale_upd_stock//CREATETRIGGERsale_upd_stockAFTERINSERTON銷售記錄FOREACHROWBEGINUPDATE商品

SET庫存數(shù)量=庫存數(shù)量-NEW.數(shù)量WHERE商品編號=NEW.商品編號;--用NEW關鍵字訪問新記錄END//DELIMITER;任務要求:使用SQL語句創(chuàng)建AFTERINSERT觸發(fā)器,當向銷售記錄表中插入新記錄時,自動將商品表中的庫存數(shù)據(jù)進行更新。主要SQL語句:銷售后自動扣減庫存1觸發(fā)器sale_upd_st

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經(jīng)權益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
  • 6. 下載文件中如有侵權或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論