亚洲激情专区-91九色丨porny丨老师-久久久久久久女国产乱让韩-国产精品午夜小视频观看

溫馨提示×

溫馨提示×

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

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

數據庫優化之創建存儲過程、觸發器

發布時間:2020-08-08 13:20:31 來源:網絡 閱讀:1705 作者:楊書凡 欄目:MySQL數據庫

    存儲過程可加快查詢的執行速度,提高訪問數據的速度,幫助實現模塊化編程,保存一致性,提高安全性。觸發器是在對表進行插入、更新、刪除操作時自動執行的存儲過程,通常用于強制業務規則。


一、存儲過程

1. 為什么需要存儲過程

    從客戶端通過網絡向服務器發送SQL代碼并執行是不安全的,給***提供盜取數據的機會,如下圖所示,一個簡單的SQL注入過程

數據庫優化之創建存儲過程、觸發器

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

(1)數據不安全,網絡傳送SQL代碼,容易被未授權者截獲

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

(3)網絡流量大,對于反復執行的SQL代碼,在網絡上多次傳送,影響網絡傳輸量


2. 什么是存儲過程

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

    使用存儲過程的優點:

(1)模塊化程序設計,只需創建一次,以后即可調用該存儲過程任意次

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

(3)減少網絡流量

(4)具有良好的安全性

    存儲過程分為系統存儲過程和用戶自定義的存儲過程


3. 系統存儲過程

    是一組預編譯的T-SQL語句,提供了管理數據庫和更新表的機制,并充當從系統表中檢索信息的快捷方式

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

    系統存儲過程的名稱以“sp_”開頭,存放在Resource數據庫中

數據庫優化之創建存儲過程、觸發器

   

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

exec  存儲過程名  [參數值]


例如:執行以下T-SQL語句

數據庫優化之創建存儲過程、觸發器


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

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

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

exec  xp_cmdshell  DOS命令  [no_output]

其中,no_output為可選參數,設置執行DOS命令后是否輸出返回信息

例如:在C盤下創建一個文件夾bank,并查看文件

數據庫優化之創建存儲過程、觸發器


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

    除了使用系統的存儲過程外,也可以創建自己的存儲過程。可以使用SSMS或T-SQL語句創建存儲過程

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

數據庫優化之創建存儲過程、觸發器


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

    創建存儲過程的語法如下:

數據庫優化之創建存儲過程、觸發器

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

drop  proc  存儲過程名


案例:有以下兩個表,編寫存儲過程,實現網絡管理專業的平均分

數據庫優化之創建存儲過程、觸發器

數據庫優化之創建存儲過程、觸發器  

  

觸發器

    觸發器是一種特殊的存儲過程,當表中數據發生更新時自動調用,以響應INSERT、UPDATE、DELETE語句

1. 什么是觸發器

    觸發器是對表進行插入、更新、刪除操作時自動執行的存儲過程,通常用于強制業務規則,可以定義比用CHECK約束更為復雜的約束。觸發器主要是通過事件觸發而被執行的,而存儲過程可以通過存儲過程名稱而被直接使用。


2. 觸發器的分類

INSERT觸發器:當向表中插入數據時觸發

UPDATE觸發器:當更新表中某列或多列時觸發

DELETE觸發器:當刪除表中記錄是觸發


3. deleted表和inserted表

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

數據庫優化之創建存儲過程、觸發器

4. 觸發器的作用

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

(1)強化約束:實現比CHECK約束更為復雜的約束

(2)跟蹤變化:偵測數據庫內的操作,從而不允許未經許可的更新和變化

(3)級聯運行:偵測數據庫內的操作,并自動級聯影響整個數據庫的各項內容


5. 創建觸發器

    創建觸發器可使用SSMS或T-SQL語句

(1)使用SSMS創建觸發器

數據庫優化之創建存儲過程、觸發器


(2)使用T-SQL語句創建觸發器

    使用T-SQL語句創建觸發器的語法如下:

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


案例:創建一個觸發器,當有人更改信息時,提示一條消息,并阻止操作

數據庫優化之創建存儲過程、觸發器


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

數據庫優化之創建存儲過程、觸發器


創建觸發器時注意事項

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

(2)觸發器只能在當前數據庫中創建,但可以引用當前數據庫的外部對象

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






向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

平原县| 营口市| 武功县| 资溪县| 怀集县| 文登市| 闽侯县| 双鸭山市| 泰兴市| 和田县| 九龙县| 昌江| 盐边县| 桓仁| 芜湖县| 聂荣县| 涿鹿县| 桐柏县| 古蔺县| 潮安县| 桂林市| 岳阳市| 夹江县| 鲁山县| 灌阳县| 溧水县| 东台市| 青河县| 平昌县| 黎城县| 昭苏县| 蓝山县| 通州区| 宜兰县| 上犹县| 于田县| 重庆市| 宿松县| 乃东县| 广河县| 青浦区|