數據庫本質上作的工做是儲存和查詢數據。理論上而言,MySQL
應該叫作DBMS
,也就是數據庫管理系統,而不是數據庫。數據庫
DBMS
提供了統一的創建、使用、管理數據庫的接口,常見的DBMS
有postgreSQL
、MariaDB
、SQL Server
等。性能優化
Schema
一般來講,一個DBMS
會支持多個數據庫共存。這裏所說的數據庫指的是特定數據庫管理系統管理下的數據庫,而不是上一節說的DBMS
。函數
而Schema
的中譯術語通常叫模式,Schema
描述了數據庫的結構,好比說有哪些表,表有哪些字段,字段分別有哪些限制,有哪些聲明瞭的函數,等等。post
一般的DBMS
每每是這樣的結構:位於DBMS
管理最頂層的是一個或多個數據庫,數據庫裏存放表,表裏以行爲單位存放數據。性能
表的英語術語是Table
。優化
用過Excl嗎?spa
id | name |
---|---|
1 | Mike |
2 | John |
直觀的表就是一個二維的「表」,有行,有列。code
列的術語是 Column
。對象
每一個列都應該有一個特定的類型(type
),使該列僅僅儲存指定類型的數據。接口
鍵的術語是 Key
。
一般指的是Primary Key
,也就是主鍵。主鍵能夠是任意一個列。可是若是列是主鍵,那麼這個列必須每一個行都保證不和其餘行重複。
主鍵也能夠是多個列,若是是多個列,那麼必須保證這些列的組合不重複。
舉例來講
db | table | id | name |
---|---|---|---|
aa | aaaaa | 11 | xxxx |
aa | bbbbb | 11 | xxxx |
其中db
和table
還有id
都是主鍵,只要保證沒有兩個行同時存在相同的db
/table
/id
就算是知足了主鍵約束。
須要注意的是,多主鍵的可移植性存疑,不必定其餘的
DBMS
會支持。
行的術語是 Row
。
每一個行都是一條記錄(record
),換作對象的概念的話,也能夠說,每一個表都儲存了一個其特有的的Row
對象的集合,Column
一一對應Row
對象的屬性。
好比上文的
id | name |
---|---|
1 | Mike |
2 | John |
對象概念表達就是
class row { int id; std::string name; }; const std::set<row> table;
SQL
的直譯是結構化查詢語言,其實就是標準化的數據庫查詢語言,基本每一個DBMS
都支持。
可是……數據庫管理系統對SQL
標準的支持並非那麼上心。其中有性能優化、平臺優化之類的緣由,也有數據庫軟件開發商自身的考慮。但總而言之,不要太期待一樣的SQL
能在任意DBMS
裏都同樣跑得歡。