XAMPP - 資料庫應用

12.1:資料庫 & MySQL 介紹

什麼是資料庫呢??

又稱為資料管理系統,簡而言之可視為電子化的檔案櫃——儲存電子檔案的處所,使用者可以對檔案中的資料執行新增、擷取、更新、刪除等操作[1]。

所謂「資料庫」是以一定方式儲存在一起、能予多個使用者共享、具有儘可能小的冗餘度、與應用程式彼此獨立的資料集合。一個資料庫由多個表空間(Tablespace)構成。

資料來源:
 維基百科:https://zh.wikipedia.org/zh-tw/%E6%95%B0%E6%8D%AE%E5%BA%93


MySQL

MySQL在過去由於效能高、成本低、可靠性好,已經成為最流行的開源資料庫,因此被廣泛地應用在Internet上的中小型網站中。隨著MySQL的不斷成熟,它也逐漸用於更多大規模網站和應用,比如維基百科、Google和Facebook等網站。非常流行的開源軟體組合LAMP中的「M」指的就是MySQL。

資料來源:
 維基百科:https://zh.wikipedia.org/wiki/MySQL

12.2:XAMPP-Mysql

首先要先確認XAMPP控制面板的Mysql有沒有啟動。

有綠色底色代表有正常啟動。

在XAMPP中要對Mysql資料庫做管理,是透過phpmyadmin的工具。什麼是phpmyadmin??,簡單來說就是透過網頁介面來管理資料庫的設定。

那要怎麼打開phpmyadmin的管理介面呢?? 有兩種方法:

  1. 直接在瀏覽器上輸入: http://localhost/phpmyadmin
  2. 在XAMPP的控制面板上,MySQL的那列有個 Admin 的按鈕,按下後會直接從瀏覽器打開phpmyadmin的管理頁面。
以上兩種方法都可以打開phpmyadmin的管理頁面,但要記得MySQL必須是啟動的狀態才能用管理頁面。

設定MySQL登入驗證方式

當我們進入phpmyadmin的頁面時,他是直接就進入到管理頁面,但其實這樣是很危險的,假設電腦給自己以外的人使用時,只要進入網址就可以到管理者介面,資料可能會被竄改或遺失。所以我們要修改phpmyadmin的設定檔,當進入頁面時要輸入帳號和密碼才能進到管理者頁面。

修改phpmyadmin設定檔案:
  1. 當初安裝XAMPP時的位置是在C槽,所以我們進到磁碟C裡找到xampp的資料夾。
  2. 在xampp裡面找到phpmyadmin的資料夾。
  3. 找到一個叫 config.inc的檔案,用任何一種文字編輯器打開(ex:vscode、notepad+、記事本),開啟後會像這樣:

    白框就是要修改的地方

  4. 將 "$cfg['Servers'][$i]['auth_type'] = 'config';" 的config改成cookie
    像這樣:
  5. 到XAMPP控制面板把 Apache 和 MySQL 重新啟動,再到 phpmyadmin的頁面,會變成要輸入帳號和密碼才能登入。像這樣:
  6. 使用者名稱是root,密碼預設是沒有的,所以就直接按登入,登入後第一件事情就是設定密碼。登入後會看到一般設定有一個更改密碼,這樣就可以設定密碼了。 這樣之後要登入就需要輸入使用者(root)和密碼了。

12.3:新建資料庫與資料表

修改密碼後,直接實際建一個資料庫。

  1. 點選上方的資料庫進到資料庫列表
  2. 在建立新資料庫的地方輸入資訊
    • 左邊為資料庫的名稱,記得用英文命名,但不要使用打寫英文,也不要用中文。
    • 右邊是資料庫編碼,我們是用中文語系,所以用 utf8_unicode_ci
    • 設定完就按建立
    建立完成後,可以看到下面列表多了一個剛才新建的資料庫。


資料表

新建完資料庫,再來就是在資料庫裡新建資料表,資料表有點像Excel表單一樣,有欄位名稱,每個欄位也有分資料型別,欄位名稱一樣用小寫英文命名。之後從網頁輸入的資料就是會直接寫到資料表裡。

資料型別較常用的大概是這些:
新建資料表
  1. 選擇剛才新建的資料庫,因為資料庫是新建的,所以裡面還沒有任何資料表。
  2. 我們以帳號密碼的資料來建立資料表
    • 資料表名稱取名叫:user
    • 欄位數先給4個就好
    • 設定好後就按建立
  3. 按下建立後會出現欄位設定的頁面

可以注意到右邊有一個 A_I 的勾選框,那個是Auto Increment,通常用於 ID 、表單編號這類資料上面,是欄位是由系統自動填寫,每次新增資料的時候自動給值,這樣就不用人工輸入。

空值(Null)的勾選框就是這個欄位可不可以是空值,有勾就可以是空值,沒勾就不能是空值。

假設我想要讓系統在欄位自動填入上傳時間,就要設定預設值的部分,在左邊開始第4個預設值的設定,將選項改成 CURRENT_TIMESTAMP ,這樣只要新增一筆資料,就會在欄位自動填入時間,可以不用人工輸入。

設定欄位名稱、資料類型
  • 第一欄位名稱為 id 類型設定為int,要設定自動填入數字
  • 第二欄位名稱為 name 類型設定為varchar,長度為 50
  • 第三欄位名稱為 password 類型設定為varchar,長度為 50
  • 第四欄位名稱為 time 類型設定為timestamp,設定自動填入上傳時間
  • 設定完成後,按下下方的儲存。
設定值像這樣:

成功建立後就能看到資料表的表格出現

在我們的資料庫裡會出現剛才建立的資料表

12.4: 資料庫權限設定

現在我們已經建立了一個新資料庫和新資料表,現在要新增一個可以連線到這個資料庫的使用者。 往後要將資料寫入資料庫或是從資料庫抓取資料,都要透過這個使用者連線。

  1. 在左側選單選擇剛才建立的資料庫,並選擇上方的權限
  2. 可以看到目前的使用者只有 root,直接建立一個新的使用者帳號。
    選擇下方的新增使用者
  3. 輸入使用者名稱和密碼,主機名稱選擇 "本機",權限部分選擇"全選",然後就點下方的執行。
  4. 這樣子使用者就建立完成,回到剛才權限的地方會多一個剛才建立的使用者。


12.5: 資料表編輯

我們先直接從phpmyadmin管理頁來編輯資料表,後面會講到如何用自己的網頁編輯資料表。

要在資料表新增資料,首先要先知道幾個mysql的程式,不管是從phpmyadmin管理頁或是自己寫的網頁要新增或查詢資料都一定會用到的程式。


新增資料(INSERT INTO)
要在資料表新增一筆資料時,需要用到的是INSERT INTO的指令,格式像這樣:
INSERT INTO 資料表名稱 (欄位名稱1,欄位名稱2 )VALUES ('欄位值1','欄位值2');
範例:
INSERT INTO  user (name, password) VALUES ('zhewei','12345678');
12.5.1:利用phpmyadmin管理頁新增資料到資料表。
  1. 在左側選單找到我們新增的資料庫,點選裡面的資料表。
  2. 點選上面的SQL,會到輸入指令的頁面,然後點選中間的 INSERT按鈕,會出現INSERT的範例。 中間會出現剛才提到的insert ...的指令,而且指令的格式、 資料表名稱、欄位名稱都幫我們寫好了,這樣我們可以直接對這個指令修改。

  3. 一開始建立資料表時,id 和 time兩個欄位已經設定自動填入,所以id和time就不要出現在INSERT指令中,欄位值也只要2個就好,一個給name,一個給password。這兩個欄位值就請填入自己想要的內容。 類似像這樣: 設定好後就點下面的執行按鈕,如果沒問題會出現像下面這樣:
  4. 回到資料表的頁面應該會出現一筆新的資料。 id 和 time也都有自動填入資料。

12.5.2:依照上面的方式將資料多新增5筆,下面的查詢與刪除指令會需要用到多筆資料。
類似像這樣:


查詢資料(SELECT)

當我們要把資料表的資料列出來時就要用到SELECT的指令,查詢有分成查詢全部和只查詢哪些欄位就好。 格式像這樣:

SELECT * FROM 資料表名稱       ------->如果要全部欄位都顯示,可以用 *
SELECT 欄位一, 欄位二 FROM 資料表名稱  ------->只顯示某幾格欄位。  
範例:
SELECT * FROM user;
SELECT name,time FROM user;

12.5.3:利用SELECT指令查詢12.5.2新增的全部資料
  1. 到SQL的方式與12.5.1一樣
  2. 這次點選 "SELECT*" 這個按鈕,會出現SELECT指令,一樣會把資料表名稱、格式等都寫好。
  3. 設定好後就點執行,會像這樣: 看起來好像沒什麼變化,因為進到資料表時,預設就會先執行SELECT顯示所有資料。

12.5.4:用SELECT指令查詢12.5.2新增的資料,只要顯示name和time兩個欄位資料就好。
  1. 到SQL的方式與12.5.1一樣
  2. 這次點選 "SELECT" 這個按鈕,會出現SELECT指令,一樣會把資料表名稱、格式等都寫好。
  3. 因為只要顯示name和time的欄位資料,所以欄位只要保留name和time就好。像這樣:
  4. 設定好後就點執行,會像這樣:
  5. 可以看到只有顯示 id 和 time的欄位出現。


條件的用法(WHERE)

如果我們要顯示的資料是有特定的值,那在用SELECT時可以在後面加一個WHERE和欄位名稱、值。 WHERE格式像這樣:

WHERE 欄位名稱 = "值" ;

假設我們要顯示user這個資料表中,name的欄位叫zhewei1的資料,那要用到像這樣的指令:

SELECT * FROM user WHERE name = "zhewei1";

那如果我今天有2個以上的條件呢?,那就要用and分開欄位名稱的判斷。像下面這樣:

假設要顯示 name的欄位叫做zhewei1,同時id欄位資料是2這一筆資料
SELECT * FROM user WHERE name = "zhewei1" and id = "2";
直接實際來對資料庫下指令試試看:
12.5.5:在資料表中只顯示有條件的欄位
  1. 顯示name欄位叫做 zhewei2 的那一筆資料(資料依照在12.5.2時所新增的欄位資料)
    結果會像這樣:
  2. 顯示name欄位叫做 zhewei3,同時id是4的那一筆資料(資料依照在12.5.2時所新增的欄位資料)
    結果會像這樣:


刪除資料(DELETE)

如果今天要刪除資料表內的資料要用到DELETE的指令,格式像這樣:

DELETE FROM 資料表名稱 ------>把資料表所有資料刪除

如果直接下這行指令會直接把資料表裡面的所有資料刪除,除非是要把整個資料表清空,不然在下指令時一定要下條件判斷,所以在執行DELETE時千萬要注意。

在DELETE下條件判斷,一樣是用到上面提到的WHERE放式,像下面這樣:

DELETE FROM 資料表名稱 WHERE 欄位名稱 = "值";
範例:
假設要刪除 user資料表裡,name欄位叫做zhewei的那一筆資料,指令像這樣:
DELETE FROM user WHERE name = "zhewei";
實際在phpmyadmin上刪除資料試試看
12.5.6:刪除name欄位叫做 zhewei2 的那一筆資料(資料依照在12.5.2時所新增的欄位資料)
結果會像這樣: 回到資料表頁面,可以看到zhewei2,那一筆資料已經被刪除了。

資料來源
鳥哥上課教材資料: