資料庫名詞與概念簡介–用 Excel 為概念出發,前往 MySQL

前言

唉呀 … 真的不要看不起 Excel 啦! 它可以算是簡易版的資料庫呢!

這篇文章我打算用很短的篇幅,用我們最常見的 Excel 的各個欄位,來引領大家了解一點 MySQL 資料庫的基礎名詞跟基本概念。

本文的論述不嚴謹,但是我想很容易懂!

對了!為了求淺顯,以下的 MySQL 操作,其實都是在 phpMyAdmin 下面操作,請不要弄混了這兩者唷! phpMyAdmin 不等於 MySQL 唷!


打開 Excel

370

圖一、典型的,剛打開的 Excel 介面


什麼是「新增一個資料庫」、「使用一個資料庫」?

若以 SQL 語法來說,就是下指令:  CREATE DATABASE [資料庫名稱] 以及 USE [資料庫名稱]

那資料庫的地位到底是什麼呢?

你就想成是一個 Excel 檔案吧!當你在 MySQL 內下指令 CREATE DATABASE book1,就是你新增了一個叫做 book1 的資料庫,以 Excel 來想像,就是你新增了一個 Book1.xls 檔案。

371

圖二、 新增資料庫


什麼是「新增一個資料表」、「使用一個資料表」?

打開Excel,看到下面的 Sheet1、Sheet1、Sheet1了嗎? 在 Excel  內這個稱為工作表(工作分頁)。

這樣的一頁,就是一個資料表哇! 所以當你在 MySQL 內新增了一個資料表時,以 Excel 來想,就是你增加了一個工作表。

372

圖三、Excel  的工作表

373

圖四、兩者的比對,我刻意把資料內容打成一模一樣,請參照理解^^

唯一的差別是,在 Excel 裡頭 ,它直接幫你假設好每個欄位的名稱(就是A、B、C…),而且每個欄位的資料型態都是智慧型自動判斷,究竟是數字?文字?時間?金額?因此你可以懶惰的按下右鍵 → 執行新增工作表,就完成新增了。

但是在 MySQL 內,你得親自設定新的資料表的「欄位」以及「資料型態」,然後才能成功的新增一張資料表。

「欄位」以及「資料型態」請看下面。


什麼是「欄位」跟「資料型態」?

來看看 Excel ,看到上面的 A、B、C…Z、AA、AB…  這就是欄位名稱,只是 Excel 內你不能自己決定欄位名稱,而是 Excel  幫你決定好了,就是A、B、C…

375

圖五、 Excel 的欄位

376

圖六、MySQL  的欄位

每個欄位都有自己的資料型態,Excel  的話,它會自己看情況判斷。不過,你也可以自己指定,比如說,你可以強制指定這一欄是數值,例如下圖七

377

圖七、在 Excel 強制指定欄位型態是數值

而在 MySQL 內,當你新增資料表的時候,你就得指定好每一個欄位的資料型態是什麼,甚至每個資料型態的數值範圍、字串長度等等限制,都要事先指定好。 (之後當然是可以改啦,你愛怎麼改就怎麼改…只是…這不是個好習慣XD 除非很有必要… )

378

圖八、在 MySQL 內,各個欄位的資料型態與限制值


什麼是「主鍵」?

上面長篇大論說完了欄位,那 Excel  分頁左邊的 1、2、3、4、5 … 這個流水號呢?有沒有對應的資料庫概念呢?

379

圖九、 Excel 的流水號

嗯…資料庫內,雖然沒有強制要求使用者一定要設置這種帶有唯一順序性質的流水號,但是,一般都會建議一張資料表內最好有一個欄位的資料是絕不重複的,譬如、身分證字號,那可以確實的區分每一個人。譬如、時間戳記(timestamp)可以確實的區分每一秒鐘。

上面這個概念就是「主鍵」(primary key),每一筆資料,它的主鍵欄位值一定是獨特而且唯一(嚴格的說,是在同一資料表內獨特且唯一),因此資料庫便可以用它來確實區分開每筆資料囉!

在實務上,我們經常會在資料表內添上一個流水號欄位,把這個欄位設定為自動累加的整數(就是流水號),這樣就是最簡單的主鍵,我們也不必煩惱哪個欄位最適合當主鍵了。

3710

圖十、id 這個欄位就是我設定的主鍵欄位

補充一句話,大部分的資料庫雖然允許資料表沒有主鍵、沒有索引,只不過沒有主鍵或者索引的話,有許多操作可能無法進行。


上面那張圖的「索引」是?

如果你設定某欄位為主鍵,MySQL 就會自動把它當成索引。但請注意! 索引有很多類型, 主鍵可以當索引,可是索引不一定非得是主鍵,請參考這兩篇:


所謂在資料庫內新增一筆資料?

記住!其實在原文世界裡,討論關於 SQL 的一筆資料時,英文的原文是 record,所以應該要翻譯為「記錄」才對。以下我們就不再隨性的說一筆資料,而開始使用正式的稱呼: 「一筆記錄」。

你大概可以這樣想:對於一張資料表而言,每新增一筆記錄,主鍵欄位一定會填入一個獨特值,而整筆記錄也會佔用了一個完整的席次 (不管其他欄位的值為何,甚至可能是空值都沒關係) 。

3711

圖十一、 資料庫內的「一筆記錄」

不像 Excel  ,可以隨便跨欄位隨便打,隨便打的好處當然是方便,壞處就是你得自己控制這些記錄的排列。而且,萬一你輸入時,沒有「井然有序」,那之後很難從記錄海裡面找到需要的東西。


資料庫的Query (查詢)

準備要超出 Excel 範圍囉!  這是這篇文章的最後一小節。

我們先不談跨資料表的應用!

現在,我們要在一張表格內查記錄。 而且,我們不需要全部的記錄,只需要特定對象且符合特定條件的記錄,那我們當然希望有個秘書可以幫我達成這項工作啦!

這個秘書就是資料庫的Query (查詢),所謂 Query (查詢),就是一種「有條件的,挑揀所需記錄的方法」,指令是 SELECT。

比如說,我們現在面對一張會員資料表,裡面可能有幾十萬筆記錄,但我不可能一個一個看,我需要請資料庫挑揀出身高超過 200 公分的人,並且我需要這些人的完整資料,以 SQL 語法的風格可以這麼寫:

SELECT  *  FROM  會員資料表  WHERE 身高>200cm  ;

  • SELECT * FROM 會員資料表,是第一步:這一步是請資料庫把每一筆記錄的全部欄位都列出來,那個 * 就是所有欄位的意思。
  • WHERE 身高欄位>200cm ,是第二步:在輸出結果內,把身高超過200的記錄挑揀出來。

於是我們就可以得到那些身高超過200的人們的完整會員資料,請參考下圖範例:

image

圖十二、畫面中的紅框,就是相當於我手動完成「SELECT  *  FROM  會員資料表  WHERE 身高>200cm  ; 」這句話的動作

再來,若我沒興趣知道他們的亂七八糟資料,什麼體重血型愛好的…其實我只是需要他們的姓名跟電話,那該怎麼做? 很簡單,你一開始挑揀的欄位就不要寫 * 號,改成這樣:

SELECT 姓名,電話  FROM  會員資料表  WHERE 身高>200cm  ;

那就會只剩下姓名跟電話輸出囉! 請參考下圖:

image

圖十三、畫面中的紅框,就是相當於我手動完成「SELECT  姓名,電話  FROM  會員資料表  WHERE 身高欄位>200cm  ; 」這句話的動作


結語

用很簡單,甚至可以說不太嚴謹也不算完整的方式,盡可能簡介了資料庫的概念。旨在迅速帶給毫無概念的人:到底資料庫是什麼!?

希望大家能夠更容易的理解資料庫,並讓資料庫不再那麼神祕! : )

對了 … 如果想練習 MySQL + phpMyAdmin ,目前不建議繼續安裝 Appserv ,因為已經太久沒維護更新囉! 我推薦 Ampps ,雖然乍看之下比 Appserv 龐大許多…xD

有疑義或發現我的謬誤者,歡迎迴響!

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *

這個網站採用 Akismet 服務減少垃圾留言。進一步瞭解 Akismet 如何處理網站訪客的留言資料