為什麼需要數據庫?
因為應用程序需要保存用戶的數據,比如Word需要把用戶文檔保存起來,以便下次繼續編輯或者拷貝到另一台電腦。
要保存用戶的數據,一個最簡單的方法是把用戶數據寫入文件。例如,要保存一個班級所有學生的信息,可以向文件中寫入一個CSV文件:
id,name,gender,score 1,小明,M,90 2,小紅,F,95 3,小軍,M,88 4,小麗,F,88
如果要保存學校所有班級的信息,可以寫入另一個CSV文件。
但是,随着應用程序的功能越來越複雜,數據量越來越大,如何管理這些數據就成了大問題:
如果每個應用程序都各自寫自己的讀寫數據的代碼,一方面效率低,容易出錯,另一方面,每個應用程序訪問數據的接口都不相同,數據難以複用。
所以,數據庫作為一種專門管理數據的軟件就出現了。應用程序不需要自己管理數據,而是通過數據庫軟件提供的接口來讀寫數據。至于數據本身如何存儲到文件,那是數據庫軟件的事情,應用程序自己并不關心:
數據模型
數據庫按照數據結構來組織、存儲和管理數據,實際上,數據庫一共有三種模型:
層次模型就是以“上下級”的層次關系來組織數據的一種方式,層次模型的數據結構看起來就像一顆樹:
網狀模型把每個數據節點和其他很多節點都連接起來,它的數據結構看起來就像很多城市之間的路網:
關系模型把數據看作是一個二維表格,任何數據都可以通過行号 列号來唯一确定,它的數據模型看起來就是一個Excel表:
随着時間的推移和市場競争,最終,基于關系模型的關系數據庫獲得了絕對市場份額。
為什麼關系數據庫獲得了最廣泛的應用?
因為相比層次模型和網狀模型,關系模型理解和使用起來最簡單。
關系數據庫的關系模型是基于數學理論建立的。我們把域(Domain)定義為一組具有相同數據類型的值的集合,給定一組域D1,D2,...,dn,它們的笛卡爾集定義為D1×D2×……×Dn={(d1,d2,...,dn)|di∈Di,i=1,2,...,n}, 而D1×D2×……×Dn的子集叫作在域D1,D2,...,Dn上的關系,表示為R(D1,D2,...,Dn),這裡的R表示$#%&^@!&$#;!~%¥%:(……算了,根本講不明白,大家也不用理解。
基于數學理論的關系模型雖然講起來挺複雜,但是,基于日常生活的關系模型卻十分容易理解。我們以學校班級為例,一個班級的學生就可以用一個表格存起來,并且定義如下:
通過給定一個班級名稱,可以查到一條班級記錄,根據班級ID,又可以查到多條學生記錄,這樣,二維表之間就通過ID映射建立了“一對多”關系。
數據類型
對于一個關系表,除了定義每一列的名稱外,還需要定義每一列的數據類型。關系數據庫支持的标準數據類型包括數值、字符串、時間等:
上面的表中列舉了最常用的數據類型。很多數據類型還有别名,例如,REAL又可以寫成FLOAT(24)。還有一些不常用的數據類型,例如,TINYINT(範圍在0~255)。各數據庫廠商還會支持特定的數據類型,例如JSON。
選擇數據類型的時候,要根據業務規則選擇合适的類型。通常來說,BIGINT能滿足整數存儲的需求,VARCHAR(N)能滿足字符串存儲的需求,這兩種類型是使用最廣泛的。
主流關系數據庫
目前,主流的關系數據庫主要分為以下幾類:
SQL
什麼是SQL?SQL是結構化查詢語言的縮寫,用來訪問和操作數據庫系統。SQL語句既可以查詢數據庫中的數據,也可以添加、更新和删除數據庫中的數據,還可以對數據庫進行管理和維護操作。不同的數據庫,都支持SQL,這樣,我們通過學習SQL這一種語言,就可以操作各種不同的數據庫。
雖然SQL已經被ANSI組織定義為标準,不幸地是,各個不同的數據庫對标準的SQL支持不太一緻。并且,大部分數據庫都在标準的SQL上做了擴展。也就是說,如果隻使用标準SQL,理論上所有數據庫都可以支持,但如果使用某個特定數據庫的擴展SQL,換一個數據庫就不能執行了。例如,Oracle把自己擴展的SQL稱為PL/SQL,Microsoft把自己擴展的SQL稱為T-SQL。
現實情況是,如果我們隻使用标準SQL的核心功能,那麼所有數據庫通常都可以執行。不常用的SQL功能,不同的數據庫支持的程度都不一樣。而各個數據庫支持的各自擴展的功能,通常我們把它們稱之為“方言”。
總的來說,SQL語言定義了這麼幾種操作數據庫的能力:
DDL:Data Definition Language
DDL允許用戶定義數據,也就是創建表、删除表、修改表結構這些操作。通常,DDL由數據庫管理員執行。
DML:Data Manipulation Language
DML為用戶提供添加、删除、更新數據的能力,這些是應用程序對數據庫的日常操作。
DQL:Data Query Language
DQL允許用戶查詢數據,這也是通常最頻繁的數據庫日常操作。
語法特點
SQL語言關鍵字不區分大小寫!!!但是,針對不同的數據庫,對于表名和列名,有的數據庫區分大小寫,有的數據庫不區分大小寫。同一個數據庫,有的在Linux上區分大小寫,有的在Windows上不區分大小寫。
,更多精彩资讯请关注tft每日頭條,我们将持续为您更新最新资讯!