MySQL 操作的核心閉環:連線 → 選庫 → 建表 → 插入 → 查詢 → 驗證。本文以零基礎視角,逐步拆解每個動作的標準語法、常見變體、驗證方法與避坑提醒,建立可復用的操作範本。
mysql -u root -p
# 進入 mysql> 提示符
-- 查看版本與當前時間
SELECT VERSION(), CURRENT_DATE;
-- 查看所有資料庫
SHOW DATABASES;
-- 輸出:information_schema, mysql, performance_schema, sys, test
-- 建立資料庫(若不存在)
CREATE DATABASE IF NOT EXISTS `asb` DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci;
-- 選擇資料庫(後續操作預設在此庫)
USE `asb`;
-- Database changed
-- 驗證當前庫
SELECT DATABASE();
-- +----------+
-- | DATABASE() |
-- +----------+
-- | asb |
-- +----------+
技巧:連線時直接指定庫:mysql -u root -p asb
-- 建立員工表
CREATE TABLE `emp` (
`emp_id` VARCHAR(6) NOT NULL COMMENT '工號',
`emp_name` VARCHAR(10) NOT NULL COMMENT '姓名',
`emp_age` INT NOT NULL COMMENT '年齡',
`emp_sal` INT NOT NULL COMMENT '薪資',
`emp_bir` DATE NOT NULL COMMENT '生日',
`emp_sex` VARCHAR(5) NOT NULL COMMENT '性別',
PRIMARY KEY (`emp_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='員工基本資料表';
-- 查看表清單
SHOW TABLES;
-- +----------------+
-- | Tables_in_asb |
-- +----------------+
-- | emp |
-- +----------------+
-- 查看表結構(DESC = DESCRIBE)
DESC `emp`;
-- +---------+-------------+------+-----+---------+-------+
-- | Field | Type | Null | Key | Default | Extra |
-- +---------+-------------+------+-----+---------+-------+
-- | emp_id | varchar(6) | NO | PRI | NULL | |
-- | emp_name| varchar(10) | NO | | NULL | |
-- | emp_age | int | NO | | NULL | |
-- | emp_sal | int | NO | | NULL | |
-- | emp_bir | date | NO | | NULL | |
-- | emp_sex | varchar(5) | NO | | NULL | |
-- +---------+-------------+------+-----+---------+-------+
INSERT INTO `emp` VALUES ('100005', '嘯天', 27, 3000, '1979-07-10', 'male');
-- Query OK, 1 row affected (0.03 sec)
INSERT INTO `emp` VALUES
('100001', '紅楓', 29, 8000, '1977-01-01', 'male'),
('100002', '麗鵑', 27, 7000, '1979-12-31', 'female'),
('100003', '雲濤', 30, 9000, '1976-05-20', 'male');
-- Query OK, 3 rows affected (0.01 sec)
-- Records: 3 Duplicates: 0 Warnings: 0
INSERT INTO `emp` (`emp_id`, `emp_name`, `emp_age`)
VALUES ('100004', '新人', 25);
-- emp_sal, emp_bir, emp_sex 將使用 DEFAULT 或 NULL(視定義)
SELECT * FROM `emp`;
-- +--------+----------+---------+---------+------------+---------+
-- | emp_id | emp_name | emp_age | emp_sal | emp_bir | emp_sex |
-- +--------+----------+---------+---------+------------+---------+
-- | 100005 | 嘯天 | 27 | 3000 | 1979-07-10 | male |
-- | 100001 | 紅楓 | 29 | 8000 | 1977-01-01 | male |
-- | 100002 | 麗鵑 | 27 | 7000 | 1979-12-31 | female |
-- | 100003 | 雲濤 | 30 | 9000 | 1976-05-20 | male |
-- | 100004 | 新人 | 25 | NULL | NULL | NULL |
-- +--------+----------+---------+---------+------------+---------+
-- 5 rows in set (0.00 sec)
-- 條件查詢
SELECT `emp_name`, `emp_sal` FROM `emp` WHERE `emp_sal` > 5000;
-- 排序
SELECT * FROM `emp` ORDER BY `emp_sal` DESC;
-- 統計
SELECT COUNT(*) AS total, AVG(`emp_sal`) AS avg_sal, MAX(`emp_sal`) AS max_sal FROM `emp`;
-- 字串函數
SELECT CONCAT(`emp_name`, '(', `emp_id`, ')') AS label FROM `emp`;
-- 日期函數
SELECT `emp_name`, DATEDIFF(CURDATE(), `emp_bir`) / 365 AS age_approx FROM `emp`;
| 錯誤現象 | 原因 | 正確做法 |
|---|---|---|
| Unknown database | 未 USE 或資料庫不存在 | CREATE DATABASE → USE |
| Table doesn't exist | 拼寫錯/大小寫敏感(Linux) | SHOW TABLES 確認名稱 |
| Column count doesn't match | VALUES 欄位數與表定義不符 | 指定欄位名 INSERT INTO t (a,b) VALUES (...) |
| Incorrect date value | 日期格式非 YYYY-MM-DD | 標準 ISO 格式 |
| Data truncated | VARCHAR 長度超限/數值超出型別範圍 | 調整型別或截斷資料 |
MySQL 基礎操作沒有捷徑,只有標準化動作序列 + 即時驗證 + 錯誤肌肉記憶。將上述流程內化為「連線 → 庫 → 表 → 數據 → 查詢」六步曲,每一步都有 SHOW/DESC/SELECT 驗證,才能在真實專案中快速、準確、自信地操作資料庫。