MySQL 24小時入門筆記(1),概念 原

MySQL 24小時入門筆記

1. 數據庫概念

1.1 數據和儲存

數據庫本質上做的工作是儲存和查詢數據。理論上而言,MySQL應該叫做DBMS,也就是數據庫管理系統,而不是數據庫

DBMS提供了統一的建立、使用、管理數據庫的接口,常見的DBMSpostgreSQLMariaDBSQL Server等。

1.2 數據庫和Schema

通常來說,一個DBMS會支持多個數據庫共存。這裏所說的數據庫指的是特定數據庫管理系統管理下的數據庫,而不是上一節說的DBMS

Schema的中譯術語一般叫模式Schema描述了數據庫的結構,比如說有哪些表,表有哪些字段,字段分別有哪些限制,有哪些聲明瞭的函數,等等。

通常的DBMS往往是這樣的結構:位於DBMS管理最頂層的是一個或多個數據庫,數據庫裏存放表,表裏以行爲單位存放數據。

1.3 表、列、鍵、行

1.3.1 表

表的英語術語是Table

用過Excl嗎?

id name
1 Mike
2 John

直觀的表就是一個二維的“表”,有行,有列。

1.3.2 列

列的術語是 Column

每個列都應該有一個特定的類型(type),使該列僅僅儲存指定類型的數據。

1.3.3 鍵……或者叫碼

鍵的術語是 Key

通常指的是Primary Key,也就是主鍵。主鍵可以是任意一個列。但是如果列是主鍵,那麼這個列必須每個行都保證不和其他行重複。

主鍵也可以是多個列,如果是多個列,那麼必須保證這些列的組合不重複。

舉例來說

db table id name
aa aaaaa 11 xxxx
aa bbbbb 11 xxxx

其中dbtable還有id都是主鍵,只要保證沒有兩個行同時存在相同的db/table/id就算是滿足了主鍵約束。

需要注意的是,多主鍵的可移植性存疑,不一定其他的DBMS會支持。

1.3.4 行

行的術語是 Row

每個行都是一條記錄(record),換做對象的概念的話,也可以說,每個表都儲存了一個其特有的的Row對象的集合,Column一一對應Row對象的屬性。

比如上文的

id name
1 Mike
2 John

對象概念表達就是

class row {
  int id;
  std::string name;
};

const std::set<row> table;

1.4 SQL 是什麼

SQL的直譯是結構化查詢語言,其實就是標準化的數據庫查詢語言,基本每個DBMS都支持。

但是……數據庫管理系統對SQL標準的支持並不是那麼上心。其中有性能優化、平臺優化之類的原因,也有數據庫軟件開發商自身的考慮。但總而言之,不要太期待同樣的SQL能在任意DBMS裏都一樣跑得歡。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章