MySQL入門教程系列-1.1 數據庫基礎

數據庫基礎

共同編輯,修正錯誤,這裏點擊進去 mysql

數據庫(Database,DB)是按照數據結構來組織、存儲和管理數據的創建在計算機存儲設備上的倉庫。git

簡單來講是自己可視爲電子化的文件櫃——存儲電子文件的處所,用戶能夠對文件中的數據進行新增、截取、更新、刪除等操做。數據管理再也不僅僅是存儲和管理數據,而轉變成用戶所須要的各類數據管理的方式。數據庫有不少種類型,從最簡單的存儲有各類數據的表格到可以進行海量數據存儲的大型數據庫系統都在各個方面獲得了普遍的應用。github

什麼是數據庫

人們一般用數據庫這個術語來表明他們使用的數據庫軟件。這是不正確的,它是引發混淆的根源。確切地說,數據庫軟件應稱爲DBMS(數據庫管理系統)。數據庫 是經過 DBMS 建立和操縱的容器。數據庫能夠是保存在硬設備 上的文件,但也能夠不是。在很大程度上說,數據庫到底是 文件仍是別的什麼東西並不重要,由於你並不直接訪問數據 庫;你使用的是DBMS,它替你訪問數據庫。算法

數據庫指的是以必定方式儲存在一塊兒、能爲多個用戶共享、具備儘量小的冗餘度、與應用程序彼此獨立的數據集合。簡單來講可視爲電子化的文件櫃——存儲電子文件的處所,用戶能夠對文件中的數據運行新增、截取、更新、刪除等操做。sql

數據庫分類

數據庫的可多了去了,在維基百科上面有下面這些數據庫,並粗略的分了個類別。一看這裏面的學問大了去了,仍是先搬一些表明性的吧,長長見識,要深刻了解各類概念推薦看《數據庫系統概論》。數據庫

關係數據庫

(英語:Relational database),是建立在關係模型基礎上的數據庫,藉助於集合代數等數學概念和方法來處理數據庫中的數據。現實世界中的各類實體以及實體之間的各類聯繫均用關係模型來表示。關係模型是由埃德加·科德於1970年首先提出的,並配合「科德十二定律」。現現在雖然對此模型有一些批評意見,但它仍是數據存儲的傳統標準。標準數據查詢語言SQL就是一種基於關係數據庫的語言,這種語言執行對關係數據庫中數據的檢索和操做。數組

  • MySQL
    • MariaDB(MySQL的代替品,英文維基百科從MySQL轉向MariaDB)
    • Percona Server(MySQL的代替品)
  • PostgreSQL
  • Microsoft Access
  • Google Fusion Tables
  • SQL Server
  • FileMaker
  • Oracle
  • Sybase
  • dBASE
  • Clipper
  • FoxPro

幾乎全部的數據庫管理系統都配備了一個開放式數據庫鏈接(ODBC)驅動程序,令各個數據庫之間得以互相集成。數據結構

非關係型數據庫(NoSQL)

NoSQL一詞最先出現於1998年,是Carlo Strozzi開發的一個輕量、開源、不提供SQL功能的關係數據庫。當代典型的關係數據庫在一些數據敏感的應用中表現了糟糕的性能,例如爲巨量文檔建立索引、高流量網站的網頁服務,以及發送流式媒體。關係型數據庫的典型實現主要被調整用於執行規模小而讀寫頻繁,或者大批量極少寫訪問的事務。架構

Key/value最終一致性存儲

  • Apache Cassandra(爲Facebook所使用):高度可擴展
  • Dynamo
  • Hibari
  • Project Voldemort
  • Riak

Key/value硬盤存儲

  • LevelDB(Google)
  • BigTable
  • MemcacheDB
  • Tokyo Cabinet
  • Tuple space
  • TreapDB

Key/value RAM存儲

  • Oracle Coherence
  • memcached
  • Citrusleaf database
  • Velocity
  • Redis
  • Tuple space

Key/value基於Paxos算法的存儲

  • Keyspace

數據庫模型

數據庫模型描述了在數據庫中結構化和操縱數據的方法,模型的結構部分規定了數據如何被描述(例如樹、表等)。數據庫模型的分類以下:nosql

  • 對象模型
  • 層次模型(輕量級數據訪問協議)
  • 網狀模型(大型數據儲存)
  • 關係模型
  • 面向對象模型
  • 半結構化模型
  • 平面模型(表格模型,通常在形式上是一個二維數組。如表格模型數據Excel)

架構

數據庫的架構能夠大體區分爲三個歸納層次:內層、概念層和外層。

  • 內層:最接近實際存儲體,亦即有關數據的實際存儲方式。
  • 外層:最接近用戶,即有關個別用戶觀看數據的方式。
  • 概念層:介於二者之間的間接層。

數據庫索引

數據索引的觀念由來已久,像是一本書前面幾頁都有目錄,目錄也算是索引的一種,只是它的分類較廣,例如車牌、身份證字號、條碼等,都是一個索引的號碼,當咱們看到號碼時,能夠從號碼中看出其中的端倪,如果要找的人、車或物品,也只要提供相關的號碼,便可迅速查到正確的人事物。

數據庫操做:事物

事務(transaction)是用戶定義的一個數據庫操做序列,這些操做要麼全作,要麼全不作,是一個不可分區的工做單位。

數據表

關係數據庫沒有數據表,關鍵字、主鍵、索引等也就無從談起,數據表是關係數據庫中一個很是重要的對象,是其它對象的基礎,也是一系列二維數組的集合,用來存儲、操做數據的邏輯結構。根據信息的分類狀況。一個數據庫中可能包含若干個數據表,每張表是由行和列組成,記錄一條數據數據表就增長一行,每一列是由字段名和字段數據集合組成,列被稱之爲字段,每一列還有本身的多個屬性,例如是否容許爲空、默認值、長度、類型、存儲編碼、註釋等

數據類型

在定義數據字段的類型對你的數據庫的優化很是重要,數據類型決定了數據在計算機中的存儲格式,表明不一樣的信息類型,大體能夠分爲:數值、日期/時間和字符串(字符)類型,字符串類型又包括二進制類型。

上圖中每一列就是一個字段,每一個字段都有本身的類型,例如name列爲字符串類型,level 列爲數字類型。

關係鍵

關係鍵是關係數據庫的重要組成部分。關係鍵是一個表中的一個或幾個屬性,用來標識該表的每一行或與另外一個表產生聯繫。一列(或一組列),其值可以惟一區分表中每一個行。

主鍵

主鍵(primary key或unique key),又稱主碼,數據庫表中對儲存數據對象予以惟一和完整標識的數據列或屬性的組合。一個數據列只能有一個主鍵,且主鍵的取值不能缺失,即不能爲空值(Null)。

表中的任何列均可以做爲主鍵,只要它知足如下條件:

  • 任意兩行都不具備相同的主鍵值;
  • 每一個行都必須具備一個主鍵值(主鍵列不容許NULL值)。

除MySQL強制實施的規則外,應該堅持的 幾個廣泛承認的最好習慣爲:

  • 不更新主鍵列中的值;
  • 不重用主鍵列的值;
  • 不在主鍵列中使用可能會更改的值。(例如,若是使用一個名字做爲主鍵以標識某個供應商,當該供應商合併和更改其 名字時,必須更改這個主鍵。)

超鍵

超鍵(superkey),有的文獻稱「超碼」,是在數據庫關係模式設計中可以惟一標示多元組(即「行」)的屬性集。包含全部屬性的集叫作明顯(平凡)超鍵。

候選鍵

在關係模型中,候選鍵或候選碼(candidate key)是某個關係變量的一組屬性所組成的集合,它須要同時知足下列兩個條件:

  • 這個屬性集合始終可以確保在關係中能惟一標識元組
  • 在這個屬性集合中找不出真子集可以知足條件

知足第一個條件的屬性集合稱爲超鍵,所以咱們也能夠把候選鍵定義爲「最小超鍵」,也就是不含有多餘屬性的超鍵。

候選鍵的重要性是它們可以在關係中惟一標識出不一樣的元組,所以超鍵也是在設計數據庫模式時須要指定的最重要的約束之一。因爲在關係模型中,每一個關係都是一個集合(沒有重複的元素),因此每一個關係都至少有一個候選鍵(由於全部屬性組合必然是個超鍵)。可是在某些關係型數據庫中表也能表明多重集,因此在每一個關係中都顯式地定義至少一個候選鍵是一條很重要的設計原則。數據庫管理系統一般都須要將每一個關係中的某個候選鍵定義爲主鍵,亦即這個候選鍵是區分不一樣元組時首選的識別方式,例如外鍵一般就是引用主鍵而非其餘候選鍵。

外鍵

外鍵(foreign key,臺灣譯做外來鍵),又稱外部鍵。其實在關係數據庫中,每一個數據表都是由關係來連繫彼此的關係,父數據表(Parent Entity)的主鍵(primary key)會放在另外一個數據表,當作屬性以建立彼此的關係,而這個屬性就是外鍵。

好比,學生跟老師之間是教學的關係,學生數據表會有個屬性叫指導老師(FK),而這個值就是對應到老師數據表的老師代號(PK),學生的指導老師就是外鍵。

代理鍵

在關係型數據庫設計中,代理鍵是在當數據表中的候選鍵都不適合當主鍵時,例如數據太長,或是意義層面太多,就會請一個無心義的但惟一的字段來代爲做主鍵。

代理鍵是:

  • Surrogate (1) – Hall, Owlett and Codd (1976)
    一個代理鍵值肯定了外部世界的一個實體。代理鍵值是數據庫生成的,歷來不顯示給用戶或應用程序看。
  • Surrogate (2) – Wieringa and De Jonge (1991)
    一個代理鍵值肯定了數據庫中的一個對象。代理鍵值是數據庫生成的,用戶或應用程序看不到它。

在實踐中,代理鍵值一般是個自動遞增的數字。在Sybase或SQL Server,用identity column標識代理鍵,PostgreSQL裏用serial,Oracle裏用SEQUENCE,在MySQL裏用一個標記有AUTO_INCREMENT的字段。

天然鍵

天然鍵與代理鍵相反,它是在天然生活中惟一肯定一個事物的標識。身份證號就是一個天然鍵,用於肯定一我的。

相關文章
相關標籤/搜索