本文整理 MySQL 核心 SQL 語法,涵蓋資料定義 (DDL)、資料操作 (DML)、資料型態、查詢進階與日期比較差異,供開發與維護人員快速查閱。
CREATE TABLE table_name (
column1 datatype [NOT NULL] [PRIMARY KEY],
column2 datatype [NOT NULL],
...
);
datatype:資料型態(見下表)NOT NULL:禁止空值PRIMARY KEY:指定主鍵-- 新增欄位
ALTER TABLE table_name ADD COLUMN column_name datatype;
-- 設定/移除主鍵
ALTER TABLE table_name ADD PRIMARY KEY (column_name);
ALTER TABLE table_name DROP PRIMARY KEY;
注意: MySQL 不支援 DROP COLUMN 語法(舊版本),需重建表或使用工具。
CREATE INDEX index_name ON table_name (column_name);
DROP INDEX index_name ON table_name;
DROP TABLE table_name;
DROP INDEX index_name;
| 型態 | 說明 | 範圍/限制 |
|---|---|---|
SMALLINT | 16 位元整數 | -32768 ~ 32767 |
INTEGER | 32 位元整數 | -2147483648 ~ 2147483647 |
DECIMAL(p,s) | 定點數 | p=總位數, s=小數位;預設 p=5,s=0 |
FLOAT | 32 位元浮點數 | 約 7 位有效數字 |
DOUBLE | 64 位元浮點數 | 約 15 位有效數字 |
CHAR(n) | 固定長度字串 | n ≤ 254 |
VARCHAR(n) | 可變長度字串 | n ≤ 4000 |
GRAPHIC(n) | 雙位元組字串 | n ≤ 127(適合中文) |
VARGRAPHIC(n) | 可變雙位元組字串 | n ≤ 2000 |
DATE | 日期 | YYYY-MM-DD |
TIME | 時間 | HH:MM:SS |
TIMESTAMP | 日期時間 | YYYY-MM-DD HH:MM:SS.fff |
-- 指定欄位
INSERT INTO table_name (col1, col2) VALUES (val1, val2);
-- 子查詢新增
INSERT INTO table_name (col1, col2)
SELECT colx, coly FROM another_table;
-- 基本查詢
SELECT col1, col2 FROM table_name;
SELECT * FROM table_name WHERE col1 = 'xxx' [AND col2 > 'yyy'];
-- 排序
SELECT col1, col2 FROM table_name ORDER BY col2 [DESC];
-- 多表聯結
SELECT * FROM table1, table2 WHERE table1.col1 = table2.col1;
-- 聚合查詢
SELECT COUNT(*) FROM table_name WHERE col = 'xxx';
SELECT SUM(col1) FROM table_name;
SELECT col1, AVG(col2) FROM table_name GROUP BY col1 HAVING AVG(col2) > 'xxx';
-- 子查詢 / EXISTS / IN
SELECT * FROM table1 WHERE EXISTS (SELECT * FROM table2 WHERE conditions);
SELECT * FROM table1 WHERE col1 IN (SELECT col1 FROM table2 WHERE conditions);
-- 模糊 / 範圍 / 集合
SELECT * FROM table1 WHERE col1 LIKE 'x%';
SELECT * FROM table1 WHERE col1 IN ('a','b');
SELECT * FROM table1 WHERE col1 BETWEEN xx AND yy;
UPDATE table_name SET col1='xxx' WHERE conditions;
DELETE FROM table_name WHERE conditions;
| 資料庫 | 日期比較語法 |
|---|---|
| Access | WHERE mydate > #2000-01-01# |
| Oracle | WHERE mydate > CAST('2000-01-01' AS DATE)WHERE mydate > TO_DATE('2000-01-01','YYYY-MM-DD') |
| MySQL / SQL Server | WHERE mydate > '2000-01-01' (標準 ANSI 格式) |
日期時間比較 (Oracle): TO_DATE('2000-01-01 10:00:01','YYYY-MM-DD HH24:MI:SS')
SUM(expr):總和AVG(expr):平均COUNT(expr):非空計數COUNT(*):總行數(含 NULL)MAX(expr) / MIN(expr):極值掌握標準 SQL 與 MySQL 方言差異,能顯著降低移植與維護成本。建議搭配官方手冊深入學習交易控制、預存程序、觸發器等進階特性。