1. 程式人生 > >數據庫的一些基本概念

數據庫的一些基本概念

釋放 完整性 學分 creat transacti 取數 lB 數據頁 多個

一、基本入門概念

DBMS:數據庫管理系統,就是數據庫軟件

數據庫:保持有組織的數據的容器(通常是一個文件和一組文件),不管數據是什麽或如何組織的,是通過DBMS創建和操縱的容器。

SQL:結構化查詢語句,是專門用來與數據庫溝通的語言,需要一個支持SQL語句執行的應用程序

表:某種特定類型數據的結構化清單,存儲在表中的數據是同一種類型的數據或清單

二、內連接與外連接

內連接:也稱為自然連接,只有兩個表相匹配的行才能在結果集中出現。返回的結果集是兩個表中所匹配的數據,而舍棄不匹配的數據。由於內連接是從結果表中刪除與其他連接表中沒有匹配的行的所有行,所以內連接可能會造成信息的丟失。內連接的語法如下:

[sql]
  1. select fieldlist from table [inner] join table2 on table1.column=table2.column

外連接:不僅包含符合連接條件的行,而且包含左表(LEFT OUTER JOIN)、右表(RIGHT OUTER JOIN)或兩個邊接表(FULL OUTER JOIN)中的所有數據行。外連接的用法與內連接一樣,只是將INNER JOIN換成相應的外連接關鍵字即可。

內連接只顯示符合連接條件的記錄,外連接除了顯示符合連接條件的記錄外,還顯示邊表的記錄。

三、事務

事務是數據庫中一個單獨的執行單元,是指作為單個邏輯工作單元執行的一系列操作,要麽完全地執行,要麽完全地不執行。 事務處理可以確保除非事務性單元內的所有操作都成功完成,否則不會永久更新面向數據的資源。通過將一組相關操作組合為一個要麽全部成功要麽全部失敗的單元,可以簡化錯誤恢復並使應用程序更加可靠。一個邏輯工作單元要成為事務,必須滿足所謂的ACID(原子性atomicity、一致性consistency、隔離性isolation和持久性durability)屬性。事務是數據庫運行中的一個邏輯工作單位,由DBMS中的事務管理子系統負責事務的處理。

嚴格來說,數據庫事務屬性ACID都是有數據庫管理系統來進行保證的,在整個應用程序執行的過程中應用無需去考慮數據庫的ACID實現。

事務——指一組SQL語句

回退——指撤銷指定的SQL語句和過程

提交——指將未存儲的SQL語句結果寫入數據庫表

保留點——指事務處理中設置的臨時占位符,可以對它發布回退(與回退整個事務處理不同)

使用ROLLBACK(SQL)命令來回退(撤銷)SQL語句

使用COMMIT進行明確的提交

SAVEPOINT或SAVE TRANSACTION設置保留點(不同DBMS不同)

回退到保留點的語法:ROLLBACK TRANSACTION 保留點

(不同DBMS不同) ROLLBACK TO 保留點

事務處理塊標識:

[sql]
  1. BEGIN TRANSACTION
  2. .......
  3. COMMIT TRANSACION --不同DBMS語法不同

四、存儲過程

SQL語句要先編譯,然後再被執行。在大型數據庫系統中,為了提高效率,將為了完成特定功能的SQL語句集進行編譯優化後,存儲在數據庫服務器中,用戶通過指定存儲過程的名字來調用執行。

使用存儲過程可以增強SQL語句的功能和靈活性,並且可以保證數據的安全性和完整性,同時存儲過程可以使沒有權限的用戶在控制之下間接地存取數據庫,也保證了數據的安全。

但存儲過程不等同於函數,兩者雖然本質上沒有區別,但還是有以下幾方面的區別:
(1)存儲過程一般是作為獨立的部分來執行的,而函數可以作為查詢語句的一個部分來調用

(2)一般存儲過程實現的功能較為復雜,函數實現的功能針對性較強

(3)存儲過程可以返回多個參數,而函數只能返回一個參數

(4)函數可以嵌入在SQL中使用,可以在select中調用,但存儲過程不能

(5)函數不能直接操作實體表,只能操作內建表

(6)存儲過程在創建時即在服務器上進行了編譯,執行速度更快

五、主鍵、外鍵

主鍵:也成主碼,是數據庫中的一個或多個字段,是表中記錄的唯一標識符,主鍵不能為空,一個表中只能有一個主鍵,主鍵列可以是一列或多列,主鍵可唯一的標識一行

外鍵:也成外碼,表示的是兩個關系之間的聯系。當公共關鍵字在一個關系中為主鍵時,這個公共關鍵字被稱為另一個關系的外鍵。外鍵用來和其他表建立聯系,實現表之間的關聯,一個表可以有多個外鍵,也可以為空。

六、死鎖

在操作系統中若幹程序並發執行,他們不斷的申請、釋放資源,在此過程中,由於爭奪資源而處於無限期的等待狀態,造成程序無法繼續執行,若無外力作用,他們都無法推進下去,這時稱系統處於死鎖狀態或系統產生了死鎖。

產生死鎖的原因:系統資源不足;進程運行推進順序不對;資源分配不當

七、共享鎖和互斥鎖

在數據庫中,鎖主要是對數據進行讀、寫保護的一種機制,從數據庫系統的角度看,一般可將鎖分為共享鎖和互斥鎖

共享鎖:簡稱S鎖,也叫讀鎖。用於不更改或不更新數據的操作(只讀操作),如果事務T對數據A加上共享鎖後,其他事務只能對A再加共享鎖,而不能加互斥鎖。共享鎖可以阻止其他並發運行的程序獲取重疊的獨占鎖定,但是允許該程序獲取重疊的共享鎖定。一般要求在讀取數據前要想該數據加共享鎖。通常加共享鎖的數據頁被讀取完畢後,共享鎖就會立即被釋放。

互斥鎖:簡稱X鎖,也叫排他鎖,用於數據修改操作,確保不會對同一資源進行多重更新。用互斥鎖來保證在任意時刻,只能有一個線程訪問對象。一般要求在修改數據前要向該數據加互斥鎖。

對於鎖的使用,也有一定的限制,需要遵守兩個事項:先鎖定後操作;事務結束後必須解鎖

八、一二三四範式

範化是在識別數據庫中的數據元素、關系、以及定義所需的表和各表中的項目這些初始工作之後的一個細化過程。
1NF,第一範式。第一範式是指數據庫表的每一列都是不可分割的基本數據項,同一列中不能有多個值,即實體中的某個屬性不能有多個值或者不能有重復的屬性。第一範式要求屬性值不可再分裂成更小部分,即屬性項不能是屬性組合或由組屬性組成。
2NF,第二範式。滿足第一範式,並且要求數據庫表的每個實例或行必須可以被唯一地區分。例如:在選課關系表中(學號,課程號,成績,學分),關鍵字為組合關鍵字(學號,課程號),但是非主屬性學分對關鍵字只是部分依賴,而不是完全依賴。 解決辦法是將其分為兩個關系模式:學生表(學號,課程號,分數)和課程表(課程號,學分)。新關系通過學生表中外關鍵字課程號聯系,在需要時進行連接。
3NF,第三範式。如果關系模式R是第二範式,且每個非主屬性都不傳遞依賴於R的候選鍵,則稱R是第三範式的模式。
4NF,第四範式。例如,職工表(職工編號,職工孩子姓名,職工選修課程)。將職工表一(職工編號,職工孩子姓名),職工表二(職工編號,職工選修課程),兩個表都只有一個多值事實,所以符合第四範式。

九、CHECK約束

CHECK約束是指限制表中某一列或某些列中可接受的數據值或數據格式,它用於限制列的取值範圍,使用形式為:CHECK(約束表達式)

十、視圖

視圖是從數據庫的基本表中選取出來的數據組成的邏輯窗口,它是一個虛表,它包含的不是數據而是根據需要檢索數據的查詢。視圖定義了一種封裝SELECT語句的層次,可用來簡化數據處理,重新格式化或保護基礎數據。在數據庫中,存放的只是視圖的定義而已,不存放視圖包含的數據,這些視圖仍存放在原來的基本表結構中。

通過引入視圖機制,用戶可以將註意力集中在其關心的數據上而非全部數據,提高了用戶效率和用戶滿意度。定義視圖可以將表與表之間復雜的操作連接和搜索條件對用戶不可見,用戶只需簡單的對一個視圖進行查詢即可,所以增加了數據的安全性,但是不能提高查詢的效率。

[sql]
  1. CREATE VIEW ProductCustomers AS --視圖必須唯一命名,創建視圖
  2. SELECT cust_name,cust_contact,prod_id
  3. FROM Customers,Orders,OrderItems
  4. WHERE Customers.cust_id=Orders.cust_id AND OrderItems.order_num=Orders.order_num;
  5. #可以這樣使用視圖
  6. SELECT*
  7. FROM ProductCustomers
  8. WHERE prod_id="RGAN01";
[sql]
    1. </pre><pre name="code" class="sql">此外,可用視圖重新格式化檢索出的數據、過濾不想要的數據(使用WHERE),使用計算字段和視圖。視圖容易創建,很好使用,可大大簡化復雜數據的處理。

數據庫的一些基本概念