MySQL 是 PHP 開發最常搭配的關聯式資料庫。本文從資料類型、SQL 分類、建表約束到 CRUD 操作,提供完整入門指南與常用語法速查。
| 分類 | 類型 | 說明 |
|---|---|---|
| 數值 | TINYINT | 1 位元組,-128~127 / 0~255 (UNSIGNED) |
| SMALLINT | 2 位元組 | |
| MEDIUMINT | 3 位元組 | |
| INT / INTEGER | 4 位元組,標準整數 | |
| BIGINT | 8 位元組,大整數 | |
| FLOAT | 4 位元組,單精度浮點數 | |
| DOUBLE | 8 位元組,雙精度浮點數 | |
| DECIMAL(m,d) | 精確定點數,字串儲存,適合金額 | |
| 字串 | CHAR(n) | 定長 0~255 字元,右側填空格 |
| VARCHAR(n) | 變長 0~65535 字元,需 1-2 位元組長度前綴 | |
| TEXT / BLOB | 長文本/二進位,分 TINY/MEDIUM/LONG 四級 | |
| ENUM / SET | 列舉/集合,內部存數字索引 | |
| 日期時間 | DATE | YYYY-MM-DD |
| TIME | HH:MM:SS | |
| DATETIME | YYYY-MM-DD HH:MM:SS(無時區) | |
| TIMESTAMP | 1970-2038,自動 UTC 轉換 | |
| YEAR | YYYY |
屬性:UNSIGNED(無符號)、ZEROFILL(前導零)、AUTO_INCREMENT(自增,需配合主鍵/唯一鍵)、NOT NULL、DEFAULT。
| 分類 | 全稱 | 指令 | 說明 |
|---|---|---|---|
| DDL | Data Definition Language | CREATE, ALTER, DROP, TRUNCATE | 定義資料庫物件結構 |
| DML | Data Manipulation Language | SELECT, INSERT, UPDATE, DELETE | 操作資料內容 |
| DCL | Data Control Language | GRANT, REVOKE | 權限控制 |
| TCL | Transaction Control Language | COMMIT, ROLLBACK, SAVEPOINT | 交易控制 |
-- 建立/刪除/選擇資料庫
CREATE DATABASE db_name CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
DROP DATABASE IF EXISTS db_name;
USE db_name;
-- 建立資料表
CREATE TABLE users (
id INT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY,
username VARCHAR(50) NOT NULL UNIQUE,
email VARCHAR(100) NOT NULL,
password_hash CHAR(60) NOT NULL,
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
-- 查看結構
DESC users;
SHOW CREATE TABLE users;
-- 修改結構
ALTER TABLE users ADD COLUMN avatar VARCHAR(255) DEFAULT '';
ALTER TABLE users MODIFY COLUMN email VARCHAR(150) NOT NULL;
ALTER TABLE users CHANGE COLUMN password_hash password CHAR(60) NOT NULL;
ALTER TABLE users DROP COLUMN avatar;
ALTER TABLE users RENAME TO members;
-- 刪除資料表
DROP TABLE IF EXISTS old_table;
CHECK (age >= 0)。INSERT INTO users (username, email, password_hash) VALUES ('alice', 'alice@example.com', '$2y$10$...');
INSERT INTO users (username, email, password_hash) VALUES
('bob', 'bob@example.com', '$2y$10$...'),
('carol', 'carol@example.com', '$2y$10$...');
SELECT id, username, email FROM users WHERE id > 10 ORDER BY created_at DESC LIMIT 5;
SELECT u.*, p.title FROM users u JOIN posts p ON u.id = p.user_id WHERE u.id = 1;
UPDATE users SET email = 'new@example.com' WHERE id = 1;
-- 不加 WHERE 會更新全表!
DELETE FROM users WHERE id = 1;
-- 不加 WHERE 會清空全表!TRUNCATE TABLE users 更快且重置 AUTO_INCREMENT。
mysql -h host -u user -p
# 交互模式下以 ; 結束語句,\c 取消當前輸入
掌握 MySQL 基礎語法與資料類型選擇,是後端開發的核心技能。建議實作練習:設計一個部落格系統(users、posts、comments、categories),練習建表、關聯查詢、交易控制,再進階學習索引優化、鎖機制、主從複制。