一、為什麼我們需要資料庫?
前幾天,我們已經可以讓使用者在網頁上填寫病患資料,再透過 Servlet 接收資料,最後交給 JSP 顯示。
但是,目前還有一個問題:資料並沒有真正儲存下來。
假設使用者今天輸入了一筆資料:
姓名:小明
性別:男
生日:2006-01-21
電話:0912345678
送出表單後,網頁可以顯示這些內容,但如果沒有把資料寫入資料庫,就無法靠目前的流程永久保存它。
因此,今天我們要開始認識 MySQL,建立醫療資訊小系統的第一個資料庫。
二、MySQL 是什麼?
MySQL 是一種關聯式資料庫管理系統,可以用來儲存、查詢、修改及刪除資料。
如果把我們的系統比喻成一家醫院:
整個流程可以想成:
使用者輸入資料
↓
HTML 表單
↓
PatientServlet
↓
MySQL
↓
儲存病患資料
MySQL 會將資料按照我們設計的資料表結構保存,讓程式之後可以再把資料查詢出來。
三、建立第一個資料庫
今天先使用 MySQL Workbench 或你已經安裝好的 MySQL 工具操作。
開啟 SQL 編輯器,輸入以下指令:
CREATE DATABASE IF NOT EXISTS medical_system
CHARACTER SET utf8mb4;
按下執行後,就會建立名為 medical_system 的資料庫。
這裡有幾個重要觀念:
MySQL 官方文件也提供 CREATE DATABASE 語法,用來建立資料庫。
參考:MySQL 官方文件:CREATE DATABASE
建立完成後,再執行:
USE medical_system;
這行的意思是:
接下來的 SQL 指令,都在 medical_system 這個資料庫中操作。
四、建立病患資料表
有了資料庫之後,還需要資料表才能存放病患資訊。
我們先建立一張名為 patient 的資料表。
CREATE TABLE IF NOT EXISTS patient (
id INT AUTO_INCREMENT PRIMARY KEY,
name VARCHAR(100) NOT NULL,
gender VARCHAR(20),
birthday DATE,
phone VARCHAR(20)
);
這段程式碼看起來比較長,但其實只是在定義資料表的欄位。
每個欄位代表什麼?
欄位 資料型態 用途
id INT 病患資料的識別編號
name VARCHAR(100) 病患姓名
gender VARCHAR(20) 性別
birthday DATE 出生日期
phone VARCHAR(20) 聯絡電話
其中有三個觀念值得特別記住。
主鍵用來識別資料表中的每一筆資料。這裡選擇 id 作為主鍵,避免只靠姓名區分病患,因為不同病患可能有相同姓名。
新增資料時,MySQL 會自動產生遞增的整數編號,不需要每次都手動填寫 id。
代表這個欄位不能是 NULL。我們把它用在 name,表示姓名是這個練習中必須提供的欄位。
CREATE TABLE、主鍵與欄位型態都是建立資料表的重要部分。
參考:MySQL 官方文件:CREATE TABLE
五、確認資料表有沒有建立成功
資料表建立完成後,可以執行:
SHOW TABLES;
如果建立成功,結果中應該會出現:
patient
接著執行:
DESCRIBE patient;
這個指令可以查看資料表的欄位名稱、資料型態,以及是否允許 NULL 等資訊。
如果看到 id、name、gender、birthday 和 phone,就代表我們已經建立好第一張資料表。
六、先手動新增一筆測試資料
在串接 Java 之前,我們可以先用 SQL 測試資料表是否正常運作。
輸入:
INSERT INTO patient
(name, gender, birthday, phone)
VALUES
('測試病患', '男', '2006-01-21', '0912345678');
這裡使用 INSERT INTO 新增一筆資料。
你可能會注意到,我們沒有填寫 id。
因為 id 設定了 AUTO_INCREMENT,所以 MySQL 會自動產生編號。
接著執行:
SELECT * FROM patient;
如果操作成功,就能看到剛剛新增的資料。
這時候,我們已經完成了:
這些就是後續 CRUD 功能的基礎。
七、為什麼電話要使用 VARCHAR?
在設計資料表時,我一開始也可能會想:「電話看起來是數字,是不是應該使用 INT?」
但電話通常不需要拿來做加減乘除,而且可能包含開頭的 0、國際區碼或其他符號。
例如:
0912345678
如果把電話當成整數處理,就可能失去開頭的 0。
所以這裡使用:
phone VARCHAR(20)
讓電話以文字形式保存,比較符合實際用途。
這也提醒我們:資料型態不一定要依照外觀決定,而是要看資料真正的用途。
八、目前還沒有完成什麼?
雖然我們已經建立了資料庫,但目前 Java 程式還沒有真正連接 MySQL。
現在的系統是:
HTML
↓
Servlet
↓
JSP
接下來預計會發展成:
HTML
↓
Servlet
↓
MySQL
↓
JSP
當 Java 可以連接 MySQL 之後,使用者提交表單時,Servlet 就能把資料寫入資料庫;之後也能查詢資料,並交給 JSP 顯示。
另外,這次建立的只是練習用資料表,並非可以直接投入醫療現場的正式病患資料庫。真實醫療系統還需要更完整的權限管理、隱私保護、稽核紀錄與資料安全設計。
今日小結
今天,我們終於從網頁畫面進入資料儲存的階段。
我們建立了 medical_system 資料庫,也建立了第一張 patient 資料表,並透過 SQL 新增和查詢測試資料。
這些步驟看起來很基礎,但它們是整個系統的重要起點。
接下來,我們要思考一個問題:
如果資料庫已經建立好了,Java 要怎麼和 MySQL 溝通?
下一篇,我們就要開始認識 JDBC,讓 Java 程式真正連接資料庫。
Day 15 完成!