資料庫的基本知識

2021-06-26 06:41:08 字數 3483 閱讀 3097

儲存過程:

儲存過程處理比較複雜的業務時比較實用。

比如說,乙個複雜的資料操作。如果你在前台處理的話。可能會涉及到多次資料庫連線。但如果你用儲存過程的話。就只有一次。從響應時間上來說有優勢。

也就是說儲存過程可以給我們帶來執行效率提高的好處。

另外,程式容易出現 bug 不穩定,而儲存過程,只要資料庫不出現問題,基本上是不會出現什麼問題的。也就是說從安全上講,使用了儲存過程的系統更加穩定。

資料量小的,或者和錢沒關係的專案不用儲存過程也可以正常運作。mysql 的儲存過程還有待實際測試。如果是正式專案,建議你用 sql server 或 oracle 的儲存過程。資料與資料之間打交道的話,過程會比程式來的快的多。面試官問有沒有用儲存,實際上就是想知道前來面試的程式設計師到底做過資料量大的專案沒。如果是培訓出來的,或者小專案小公司出來的,對儲存肯定接觸的少了。

所以,要想進大公司,沒有豐富儲存過程經驗,是不行的。

那麼什麼時候才可以用儲存?對於資料量不是很大以及業務處理不是很複雜的小專案就無需要了麼?

錯。儲存過程不僅僅適用於大型專案,對於中小型專案,使用儲存過程也是非常有必要的。其威力和優勢主要體現在:

1.儲存過程只在創造時進行編譯,以後每次執行儲存過程都不需再重新編譯,而一般 sql 語句每執行一次就編譯一次,所以使用儲存過程可提高資料庫執行速度。

2.當對資料庫進行複雜操作時(如對多個表進行 update,insert,query,delete 時),可將此複雜操作用儲存過程封裝起來與資料庫提供的事務處理結合一起使用。這些操作,如果用程式來完成,就變成了一條條的 sql 語句,可能要多次連線資料庫。而換成儲存,只需要連線一次資料庫就可以了。

3.儲存過程可以重複使用,可減少資料庫開發人員的工作量。

4.安全性高,可設定只有某此使用者才具有對指定儲存過程的使用權。

列出資料庫中常用的鎖及其應用場景

資料庫中的鎖是網路資料庫中的乙個非常重要的概念,它主要用於多使用者環境下保證資料庫完整性和一致性。各種大型資料庫所採用的鎖的基本理論是一致的,但在具體實現上各有差別。目前,大多數資料庫管理系統都或多或少具有自我調節、自我管理的功能,因此很多使用者實際上不 清楚鎖的理論和所用資料庫中鎖的具體實現。在資料庫中加鎖時,除了可以對不同的資源加鎖,還可以使用不同程度的加鎖方式,即鎖有多種模式,sql server中鎖模式包括: 

1)共享鎖

sql server中,共享鎖用於所有的唯讀資料操作。共享鎖是非獨佔的,允許多個併發事務讀取其鎖定的資源。預設情況下,資料被讀取後,sql server立即釋放共享鎖。例如,執行查詢「select * from my_table」時,首先鎖定第一頁,讀取之後,釋放對第一頁的鎖定,然後鎖定第二頁。這樣,就允許在讀操作過程中,修改未被鎖定的第一頁。但是,事務 隔離級別連線選項設定和select語句中的鎖定設定都可以改變sql server的這種預設設定。例如,「 select * from my_table holdlock」就要求在整個查詢過程中,保持對錶的鎖定,直到查詢完成才釋放鎖定。 

2)修改鎖

修 改鎖在修改操作的初始化階段用來鎖定可能要被修改的資源,這樣可以避免使用共享鎖造成的死鎖現象。因為使用共享鎖時,修改資料的操作分為兩步,首先獲得一 個共享鎖,讀取資料,然後將共享鎖公升級為獨佔鎖,然後再執行修改操作。這樣如果同時有兩個或多個事務同時對乙個事務申請了共享鎖,在修改資料的時候,這些 事務都要將共享鎖公升級為獨佔鎖。這時,這些事務都不會釋放共享鎖而是一直等待對方釋放,這樣就造成了死鎖。如果乙個資料在修改前直接申請修改鎖,在資料修 改的時候再公升級為獨佔鎖,就可以避免死鎖。修改鎖與共享鎖是相容的,也就是說乙個資源用共享鎖鎖定後,允許再用修改鎖鎖定。 

3)獨佔鎖

獨佔鎖是為修改資料而保留的。它所鎖定的資源,其他事務不能讀取也不能修改。獨佔鎖不能和其他鎖相容。 

4)結構鎖

結構鎖分為結構修改鎖(sch-m)和結構穩定鎖(sch-s)。執行表定義語言操作時,sql server採用sch-m鎖,編譯查詢時,sql server採用sch-s鎖。 

5)意向鎖

意 向鎖說明sql server有在資源的低層獲得共享鎖或獨佔鎖的意向。例如,表級的共享意向鎖說明事務意圖將獨佔鎖釋放到表中的頁或者行。意向鎖又可以分為共享意向鎖、 獨佔意向鎖和共享式獨佔意向鎖。共享意向鎖說明事務意圖在共享意向鎖所鎖定的低層資源上放置共享鎖來讀取資料。獨佔意向鎖說明事務意圖在共享意向鎖所鎖定 的低層資源上放置獨佔鎖來修改資料。共享式獨佔鎖說明事務允許其他事務使用共享鎖來讀取頂層資源,並意圖在該資源低層上放置獨佔鎖。 

6)批量修改鎖

批量複製資料時使用批量修改鎖。可以通過表的tablock提示或者使用系統儲存過程sp_tableoption的「table lock on bulk load」選項設定批量修改鎖。

資料庫的三大正規化

第一正規化(the first normal form)

第一正規化是最低的規範化要求,第一正規化要求資料表不能存在重複的記錄,即存在乙個關鍵字。1nf的第二個要求是每個欄位都不可再分,即已經分到最小,關聯式資料庫的定義就決定了資料庫滿足這一條。主關鍵字達到下面幾個條件:

1. 主關鍵字段在表中是唯一的

2. 主關鍵字段中沒有複本

3. 主關鍵字段不能存在空值

4. 每條記錄都必須有乙個主關鍵字

5. 主關鍵字是關鍵字的最小子集

滿足1nf的關係模式有許多不必要的重複值,並且增加了修改其資料時疏漏的可能性。為了避免這種資料冗餘和更新資料的遺漏,就引出了第二正規化(2nf)。

第二正規化(the second normal form)

定義:如果乙個關係屬於1nf,且所有的非主關鍵字段都完全地依賴於主關鍵字,則稱之為第二正規化,簡記為2nf。

為了說明問題現舉乙個例子來說明:有乙個庫房儲存的庫有四個字段(零件號碼,倉庫號碼,零件數量,倉庫位址),

這個庫符合1nf,其中「零件號碼」和「倉庫號碼」構成主關鍵字。

但是因為「倉庫位址」只完全依賴與「倉庫號碼」,即只依賴於主關鍵字的一部分,所以它不符合2nf,

這樣首先存在資料冗餘,因為倉庫數量可能不多。

其次,存在如果更改倉庫位址時,如果漏改了某一記錄,存在資料不一致性。

再次,如果某個倉庫的零件出完了,那麼這個倉庫位址就丟失了,即這種關係不允許存在某個倉庫中不放零件的情況。

我們可以用投影分解的方法消除部分依賴的情況,而使關係達到2nf的標準。

方法是從關係中分解出新的二維表,是每個二維表中所有的非關鍵字都完全依賴於各自的主關鍵字。

我們可以如下分解:分解成兩個表(零件號碼,倉庫號碼,零件數量)和(倉庫號碼,倉庫位址)。

這樣就完全符合2nf了。

第三正規化(the third normal form)

定義:如果乙個關係屬於2nf,且每個非關鍵字不傳遞依賴於主關鍵字,這種關係是3nf。

從2nf中消除傳遞依賴,就是3nf。比如有乙個表(姓名,工資等級,工資額),其中姓名是關鍵字,

此關係符合2nf,但是因為工資等級決定工資額,這就叫傳遞依賴,它不符合3nf,

我們同樣可以使用投影分解的辦法分解成兩個表:(姓名,工資等級),

(工資等級,工資額)。

資料庫基本知識

記錄集的游標型別 forwardonly指標一直向下走.移動速度快,但是不能儲存走過的記錄.資源占用少.主要運用在服務端.static 相當於造了乙個一摸一樣的副本.不管資料庫怎麼改,都是改的副本.真正的資料沒有改.最後直接 更新到真正的資料庫.靜態適合只是讀取資料庫中的資料.比如查詢.但編輯不適合...

資料庫基本知識

語句 1 語法 select 列名稱 from 表名稱 或 select from 表名稱 2,sqlcreate 語句 1 sql createtable語句 1 語法 create table 表名稱 列名稱1,資料型別,列名稱2,資料型別,列名稱3,資料型別 2 sql creatindex ...

資料庫 基本知識

4 24 acid 資料庫四大特性 a 原子性 atomicity 要麼做完,要麼不做,舉個例子,a給b轉錢,不會出現a轉了錢,b沒有收到錢 c 一致性 consistency 從乙個狀態到另乙個狀態是一致的,再舉個例子,a給b轉錢,不會出現a轉了100塊,b只得到了50塊.i 隔離性 isolat...