1. 程式人生 > 其它 >資料庫日誌中一條"異常"資訊所包含的細節(r6筆記第18天)

資料庫日誌中一條"異常"資訊所包含的細節(r6筆記第18天)

關係型資料庫與SQL

關係型資料庫

所謂關係型資料庫,指的是將資料之間建立結構化的關係模型,並將其儲存的資料庫。例如儲存學生資訊,可以建立一張學生資訊表,將學號作為唯一識別符號,即主鍵,姓名、年齡、性別等基本資訊都作為該學號所屬主體的一種屬性,即欄位。各欄位與主鍵之間存在對應關係,都用來描述同一主體的資訊。通過應用實踐證明,關係資料庫管理系統(RDBMS)的出現,大大降低了資料建模和程式程式設計的難度。我們所熟知的MySQL和Oracle等都是屬於關係性資料庫。

SQL

SQL是結構化查詢語言(Structured Query Language)的簡稱,是一種特殊目的的程式語言,用於操作關係資料庫系統。是一種高度非過程話的語言,使用者只需要指明做什麼,而不必關心怎麼做。且語法簡單易學,只需要使用SELECT、INSERT、UPDATE、DELETE等等簡單的語法和關鍵字就能完成業務邏輯。資料庫應用最頻繁的查詢操作,也只需要一句SELECT就能得到結果。

事務

事務是指訪問並可能更新資料庫中各種資料項的一個程式執行單元(unit)。一個事務可能包含多次操作,所以它可以是一條SQL語句,一組SQL語句或整個程式。事務主要有四個特性,即ACID。

1、A (Atomicity) 原子性

原子性很容易理解,也就是說事務裡的所有操作要麼全部做完,要麼都不做,事務成功的條件是事務裡的所有操作都成功,只要有一個操作失敗,整個事務就失敗,需要回滾。

 比如銀行轉賬,從A賬戶轉100元至B賬戶,分為兩個步驟:1)從A賬戶取100元;2)存入100元至B賬戶。這兩步要麼一起完成,要麼一起不完成,如果只完成第一步,第二步失敗,錢會莫名其妙少了100元。

2、C (Consistency) 一致性

一致性也比較容易理解,也就是說資料庫要一直處於一致的狀態,事務的執行不會改變資料庫原本的一致性約束。

例如現有完整性約束a+b=10,如果一個事務改變了a,那麼必須得改變b,使得事務結束後依然滿足a+b=10,否則事務失敗。

3、I (Isolation) 獨立性

所謂的獨立性是指併發的事務之間不會互相影響,如果一個事務要訪問的資料正在被另外一個事務修改,只要另外一個事務未提交,它所訪問的資料就不受未提交事務的影響。

比如現在有個交易是從A賬戶轉100元至B賬戶,在這個交易還未完成的情況下,如果此時B查詢自己的賬戶,是看不到新增加的100元的。

4、D (Durability) 永續性

永續性是指一旦事務提交後,它所做的修改將會永久的儲存在資料庫上,即使出現宕機也不會丟失。

NoSQL

NoSQL可以解釋為“non-relational SQL”或者“Not Only SQL”。泛指非關係性的資料庫,它不保證事務的ACID特性,也不要求資料之間的關係性。由於資料的結構簡單,所以非關係型資料庫可擴充套件性,面對大資料下的讀寫效能都要優於傳統關係型資料庫,這使得它在處理大規模資料集合多重資料種類,特別是大資料應用方面顯得相較於傳統關係型資料庫更加的遊刃有餘。

關係型資料庫主要通過表(table)的形式來儲存資料,而非關係型資料庫的資料儲存方式大致可分為以下幾種:

列儲存 顧名思義,是按列儲存資料的。最大的特點是方便儲存結構化和半結構化資料,方便做資料壓縮,對針對某一列或者某幾列的查詢有非常大的IO優勢。
文件儲存 文件儲存一般用類似json的格式儲存,儲存的內容是文件型的。這樣也就有機會對某些欄位建立索引,實現關係資料庫的某些功能。
鍵值對儲存 可以通過key快速查詢到其value。一般來說,儲存不管value的格式,照單全收。(Redis包含了其他功能)
圖儲存 圖形關係的最佳儲存。使用傳統關係資料庫來解決的話效能低下,而且設計使用不方便。
物件儲存 通過類似面嚮物件語言的語法操作資料庫,通過物件的方式存取資料。
xml儲存 高效的儲存XML資料,並支援XML的內部查詢語法,比如XQuery,Xpath。