SQL server 中的「三劍客」

2022-03-13 04:18:01 字數 2287 閱讀 1823

sql server 是乙個在網路上執行的大型資料庫。我們學習 sql server 時分為兩個層次,乙個是資料庫的開發,另乙個是資料庫的維護。對於初學者而言,學習資料庫的開發是首要的,其後再去學習資料庫的維護。同時,資料庫的開發,也是專案架構的重要組成部分。

在資料庫的開發中,有三個最常用,也是最重要的物件,被稱之為開發中的「三劍客」。它們是:儲存過程、事務、觸發器。

對於初學者而言,能否熟練地運用這三個物件,是考驗你能否邁入商業開發的門檻。

儲存過程:

儲存過程是在資料庫的開發中,使用的頻率最高的物件。它是將一組資料訪問語句、流程控制語句、錯誤處理語句等,經過「打包」後,放置於資料庫中,供客戶端呼叫。

我們在客戶端對資料庫進行乙個操作時,至少要用一道sql語句。即便是一條語句,也有可能在多個模組中重複使用,那我們如何高效、規範、安全、易於維護的來使用這些語句,就成了乙個非常重要的問題。

儲存過程就能完美地解決上述的問題。它在使用上頗具彈性,優勢明顯。

首先是執行效率高。因為sql server會先將儲存過程編譯成執行計畫,並儲存起來,這樣每次呼叫時就不需要重新編譯,這對高強度的人機互動,效果是明顯的。

其次是對資料庫的操作規範而統一。這是因為從客戶端的多個模組中,有可能會對資料庫作相同的操作,使用儲存過程就可以避免在開發過程中或後期的維護中,因考慮不周而產生的歧義。

再有它的安全性好。因為它是乙個物件,所以可以對它進行許可權設定,這是單純用sql語句難以做到的。我們還可以對它進行加密,從而也避免了在客戶端被反編譯的問題,也有效地防止了注入式的攻擊。

舉個例子:在我們最熟悉的醫院his系統中,您所掛的那個號,不只有號碼與姓名,它還包含了很多相關的資訊,它被大多數的工作站所使用。如果,我們在每個模組中,都寫上一道select號的語句,是非常繁雜的事情。如果將這道語句,做成儲存過程,放置於資料庫中,由各個工作站直接呼叫,將是既規範又便捷的事。同時,也方便了今後的維護與擴充套件。

事務:對於商業應用來說,可靠性總是第一位的,其次,才是安全和效能。如果可靠性不好,就什麼都談不上了。

就網路資料庫而言,網路是不穩定的(相對而言),多種因素都會影響到資料在網路上的傳輸。這就有可能一次提交多道sql語句時,會有部分的失敗;同時,也可能出現多個使用者,同時對同乙個表進行操作,就有可能產生衝突,也會產生類似的問題。可是邏輯上的應用,要求我們要麼都成功,要麼都取消,這一點我想是不難理解的。

這時事務就可以發揮作用了。事務的原理,是建立乙個回滾機制,先將sql語句中相關的表進行鎖定,然後再執行操作。如果在執行過程中發生了錯誤,就進行回滾,返回到鎖定前的狀態。另外,事務還支援巢狀使用,無論在任何一層發生錯誤,都將從裡至外地回滾。這樣,通過這個機制,我們就可以確保對資料庫進行可靠、完整、有效地操作。

舉例:我們在刷卡購物時,至少要進行兩個操作。第一先是將卡中的貨款減去,第二是將貨物從庫存中減去,這兩個操作必需同時完成。但有時在我們進行交易時,其它客戶在我們付完款之後,先於我們將貨物買光,這就產生了問題。如果我們使用了事務,就可以有效避免這類問題。它可以在付款時就對庫存進行鎖定,避免貨物被別人買走;如果確實因庫存原因,它還可以進行回滾,將您的貨款返還到卡中。

從這個事例中,大家可以感受到事務對於商業應用來說,是何等的重要。

觸發器:

觸發器是與資料表緊密結合的一種儲存過程。當對表進行insert、update、delete操作時,它會被觸發,並自動地執行。

在實際的應用中,要避免資料出錯,驗證是必不可少的。我們可以利用觸發器,來對該錶所做的更新,進行邏輯驗證,一旦發現錯誤,就可以利用事務進行回滾;同時它還可以對其它相關的資料表,做更進一步的操作。

舉例:人員資料表中,有身份證號和出生日期。這個身份證號的第7~14位,同出生日期有對應的關係。這個驗證過程,既可以在放在客戶端進行,也可以在放在觸發器中進行。但放在觸發器中,可以避免在多個客戶端的模組中重複。當然,這只是乙個簡單的驗證。

觸發器還可以完成複雜的驗證。有時乙個表可能涉及到多個相關的應用,就會形成各自的驗證邏輯。那在不同的模組中進行分別的驗證,就遠不如在觸發器中進行集中的驗證,來得方便與合理,同時也便於後期的維護。

另乙個例子:有兩張表,學生花名冊和學生成績單,這是一對多的關聯表。每當在學生花名冊中新增新生時,就要在學生成績單中新增,數學、物理、化學、英語、語文這五條記錄。如果我們在學生花名冊中使用了觸發器,那麼在新增新生時,它就會自動地替我們在學生成績單中,新增對應的五條記錄。對這種強相關的表,使用觸發器來操作,是最合適不過的了。

當然,觸發器的功能遠不止這些,這只是最常用的兩種而已。

我在這篇文章中對這三個物件,做了乙個概括性的介紹。如果大家想學習,還是要找來參考書,書上會有更詳細、更專業的講解,並提供一些例子,來加深您的理解。

總之,要想真正掌握這些技術,還是要動手練習。只有通過練習,您才能真正體會到這三個物件的威力。

文字三劍客

檔案萬用字元和正規表示式 文字過濾工具grep linux系統中,一切皆檔案。強大的文字編輯和處理工具便必不可少了,在linux系統中,有文字處理三劍客 grep,sed,awk。在進行介紹三大工具前,我們先總結一下檔案萬用字元和正規表示式。檔案萬用字元主要就是對檔案的查詢進行檔名的模糊查詢,而正規...

三劍客 高階

awk 是一種程式語言,用於在linux unix下對文字和資料進行處理 awk 資料可以來自標準輸入,乙個或多個檔案,或其他命令的輸出 awk 通常是配合指令碼進行使用,是乙個強大的文字處理工具。01.進行逐行掃瞄檔案,從第一行到最後一行 02.尋找匹配的特定模式的行,在行上進行操作 03.如果沒...

物件導向三劍客

物件導向三把劍 封裝 繼承 多型 封裝 將資訊偽裝起來,內部封裝所有不變的 對外開放變化的 方法封裝,封裝複雜性,對外開放簡單方法 比如 屬性,可以讓外界刪除 修改,取值,那就開放 方法 把所有複雜邏輯封裝在方法裡。對外開放引數和返回值 繼承 顧名思義就是拿別人的東西為自己所用 有實現繼承,介面繼承...