MySQL 24小時入門筆記
1. 數據庫概念
1.1 數據和儲存
數據庫本質上做的工作是儲存和查詢數據。理論上而言,MySQL
應該叫做DBMS
,也就是數據庫管理系統,而不是數據庫。
DBMS
提供了統一的建立、使用、管理數據庫的接口,常見的DBMS
有postgreSQL
、MariaDB
、SQL 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 |
其中db
和table
還有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
裏都一樣跑得歡。