溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點(diǎn)擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

數(shù)據(jù)庫優(yōu)化之創(chuàng)建存儲過程、觸發(fā)器

發(fā)布時間:2020-08-08 13:20:31 來源:網(wǎng)絡(luò) 閱讀:1660 作者:楊書凡 欄目:MySQL數(shù)據(jù)庫

    存儲過程可加快查詢的執(zhí)行速度,提高訪問數(shù)據(jù)的速度,幫助實(shí)現(xiàn)模塊化編程,保存一致性,提高安全性。觸發(fā)器是在對表進(jìn)行插入、更新、刪除操作時自動執(zhí)行的存儲過程,通常用于強(qiáng)制業(yè)務(wù)規(guī)則。


一、存儲過程

1. 為什么需要存儲過程

    從客戶端通過網(wǎng)絡(luò)向服務(wù)器發(fā)送SQL代碼并執(zhí)行是不安全的,給***提供盜取數(shù)據(jù)的機(jī)會,如下圖所示,一個簡單的SQL注入過程

數(shù)據(jù)庫優(yōu)化之創(chuàng)建存儲過程、觸發(fā)器

   從上圖可知,應(yīng)用程序的執(zhí)行過程是不安全的,主要有以下幾個方面:

(1)數(shù)據(jù)不安全,網(wǎng)絡(luò)傳送SQL代碼,容易被未授權(quán)者截獲

(2)每次提交SQL代碼都要經(jīng)過語法編譯后在執(zhí)行,影響應(yīng)用程序的運(yùn)行性能

(3)網(wǎng)絡(luò)流量大,對于反復(fù)執(zhí)行的SQL代碼,在網(wǎng)絡(luò)上多次傳送,影響網(wǎng)絡(luò)傳輸量


2. 什么是存儲過程

    存儲過程是SQL語句和控制語句的預(yù)編譯集合,保存在數(shù)據(jù)庫中,可有應(yīng)用程序調(diào)用執(zhí)行,而且允許用戶聲明變量、邏輯控制語句及其他強(qiáng)大的編程功能。包含邏輯控制語句和數(shù)據(jù)操作語句,可以接收參數(shù)、輸出參數(shù)、返回單個或多個結(jié)果值及返回值

    使用存儲過程的優(yōu)點(diǎn):

(1)模塊化程序設(shè)計(jì),只需創(chuàng)建一次,以后即可調(diào)用該存儲過程任意次

(2)執(zhí)行速度快,效率高

(3)減少網(wǎng)絡(luò)流量

(4)具有良好的安全性

    存儲過程分為系統(tǒng)存儲過程和用戶自定義的存儲過程


3. 系統(tǒng)存儲過程

    是一組預(yù)編譯的T-SQL語句,提供了管理數(shù)據(jù)庫和更新表的機(jī)制,并充當(dāng)從系統(tǒng)表中檢索信息的快捷方式

(1)常見的系統(tǒng)存儲過程

    系統(tǒng)存儲過程的名稱以“sp_”開頭,存放在Resource數(shù)據(jù)庫中

數(shù)據(jù)庫優(yōu)化之創(chuàng)建存儲過程、觸發(fā)器

   

    使用存儲過程的語法如下:

exec  存儲過程名  [參數(shù)值]


例如:執(zhí)行以下T-SQL語句

數(shù)據(jù)庫優(yōu)化之創(chuàng)建存儲過程、觸發(fā)器


(2)常用的擴(kuò)展存儲過程

    擴(kuò)展存儲過程是SQL Server提供的各類系統(tǒng)存儲過程的一類,允許使用其他編程語言(如C#)創(chuàng)建外部存儲過程,通常以“xp_”開頭,以DDL形式單獨(dú)存在

    一個常用的擴(kuò)展存儲過程為xp_cmdshell ,它可以完成DOS命令下的一些操作,如創(chuàng)建文件夾、列出文件夾。語法如下:

exec  xp_cmdshell  DOS命令  [no_output]

其中,no_output為可選參數(shù),設(shè)置執(zhí)行DOS命令后是否輸出返回信息

例如:在C盤下創(chuàng)建一個文件夾bank,并查看文件

數(shù)據(jù)庫優(yōu)化之創(chuàng)建存儲過程、觸發(fā)器


4. 用戶自定義的存儲過程

    除了使用系統(tǒng)的存儲過程外,也可以創(chuàng)建自己的存儲過程??梢允褂肧SMS或T-SQL語句創(chuàng)建存儲過程

(1)使用SSMS創(chuàng)建存儲過程

數(shù)據(jù)庫優(yōu)化之創(chuàng)建存儲過程、觸發(fā)器


(2)使用T-SQL語句創(chuàng)建存儲過程

    創(chuàng)建存儲過程的語法如下:

數(shù)據(jù)庫優(yōu)化之創(chuàng)建存儲過程、觸發(fā)器

    刪除存儲過程的語法如下:

drop  proc  存儲過程名


案例:有以下兩個表,編寫存儲過程,實(shí)現(xiàn)網(wǎng)絡(luò)管理專業(yè)的平均分

數(shù)據(jù)庫優(yōu)化之創(chuàng)建存儲過程、觸發(fā)器

數(shù)據(jù)庫優(yōu)化之創(chuàng)建存儲過程、觸發(fā)器  

  

觸發(fā)器

    觸發(fā)器是一種特殊的存儲過程,當(dāng)表中數(shù)據(jù)發(fā)生更新時自動調(diào)用,以響應(yīng)INSERT、UPDATE、DELETE語句

1. 什么是觸發(fā)器

    觸發(fā)器是對表進(jìn)行插入、更新、刪除操作時自動執(zhí)行的存儲過程,通常用于強(qiáng)制業(yè)務(wù)規(guī)則,可以定義比用CHECK約束更為復(fù)雜的約束。觸發(fā)器主要是通過事件觸發(fā)而被執(zhí)行的,而存儲過程可以通過存儲過程名稱而被直接使用。


2. 觸發(fā)器的分類

INSERT觸發(fā)器:當(dāng)向表中插入數(shù)據(jù)時觸發(fā)

UPDATE觸發(fā)器:當(dāng)更新表中某列或多列時觸發(fā)

DELETE觸發(fā)器:當(dāng)刪除表中記錄是觸發(fā)


3. deleted表和inserted表

    每個觸發(fā)器都有兩個特殊的邏輯表:刪除表和插入表。由系統(tǒng)管理,存儲在內(nèi)存而不是數(shù)據(jù)庫中,因此,不允許用戶直接對其修改。它們只是臨時存放對表中數(shù)據(jù)行的修改信息,當(dāng)觸發(fā)器工作完成,它們也被刪除。

數(shù)據(jù)庫優(yōu)化之創(chuàng)建存儲過程、觸發(fā)器

4. 觸發(fā)器的作用

    主要作用是:實(shí)現(xiàn)由主鍵和外鍵所不能保證的復(fù)雜的參照完整性和數(shù)據(jù)的一致性,除此之外,還有以下幾種功能

(1)強(qiáng)化約束:實(shí)現(xiàn)比CHECK約束更為復(fù)雜的約束

(2)跟蹤變化:偵測數(shù)據(jù)庫內(nèi)的操作,從而不允許未經(jīng)許可的更新和變化

(3)級聯(lián)運(yùn)行:偵測數(shù)據(jù)庫內(nèi)的操作,并自動級聯(lián)影響整個數(shù)據(jù)庫的各項(xiàng)內(nèi)容


5. 創(chuàng)建觸發(fā)器

    創(chuàng)建觸發(fā)器可使用SSMS或T-SQL語句

(1)使用SSMS創(chuàng)建觸發(fā)器

數(shù)據(jù)庫優(yōu)化之創(chuàng)建存儲過程、觸發(fā)器


(2)使用T-SQL語句創(chuàng)建觸發(fā)器

    使用T-SQL語句創(chuàng)建觸發(fā)器的語法如下:

create  trigger  觸發(fā)器名          //創(chuàng)建的觸發(fā)器名稱
on  表名                            //在其上執(zhí)行觸發(fā)器的表或視圖名稱
[with  encryption]                 //可選,防止將觸發(fā)器作為SQL Server復(fù)制的一部分發(fā)布
for  {[delete,insert,update]}         //關(guān)鍵字,至少指定一項(xiàng),如果多項(xiàng),由逗號分隔
as sql語句


案例:創(chuàng)建一個觸發(fā)器,當(dāng)有人更改信息時,提示一條消息,并阻止操作

數(shù)據(jù)庫優(yōu)化之創(chuàng)建存儲過程、觸發(fā)器


    如果需要修改觸發(fā)器,操作方法如下,在彈出的窗口修改T-SQL語句即可

數(shù)據(jù)庫優(yōu)化之創(chuàng)建存儲過程、觸發(fā)器


創(chuàng)建觸發(fā)器時注意事項(xiàng)

(1)create trigger必須是批處理中的第一條語句,并只能應(yīng)用到一個表中

(2)觸發(fā)器只能在當(dāng)前數(shù)據(jù)庫中創(chuàng)建,但可以引用當(dāng)前數(shù)據(jù)庫的外部對象

(3)在同一條create trigger語句中,可以為多種用戶操作(如DELETE)定義相同的觸發(fā)器操作






向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI