本文匯總 MySQL 最常用的 DDL、DML、DQL 語句,涵蓋建表、約束、增刪改查、排序、分組、連接、子查詢等核心知識點,適合初學者速查與開發者備忘。
-- 建表(帶主鍵、自增、非空、唯一、外鍵、檢查約束)
CREATE TABLE stu (
id INT PRIMARY KEY AUTO_INCREMENT,
name CHAR(6) NOT NULL,
sex CHAR(1) NOT NULL CHECK (sex IN ('男','女')),
age INT CHECK (age > 0 AND age < 120)
);
-- 刪除表
DROP TABLE stu;
-- 修改表結構
ALTER TABLE user ADD COLUMN new1 VARCHAR(20) DEFAULT NULL; -- 新增字段
ALTER TABLE user ADD COLUMN new2 VARCHAR(20) NOT NULL; -- 新增非空字段
ALTER TABLE user DROP COLUMN new2; -- 刪除字段
ALTER TABLE user MODIFY new1 VARCHAR(10); -- 修改類型
ALTER TABLE user CHANGE new1 new4 INT; -- 重命名並修改類型
-- 外鍵約束
ALTER TABLE president ADD CONSTRAINT fk_country
FOREIGN KEY (f_country_name) REFERENCES country(name) ON DELETE CASCADE;
-- 插入
INSERT INTO stu (id, name, age) VALUES (1, '小明', 20);
INSERT INTO stu (name, sex, age) VALUES ('小五', '女', 20); -- 自增 id 可省略
-- 刪除
DELETE FROM stu; -- 清空表(保留自增值)
DELETE FROM stu WHERE id > 3 AND age = 40; -- 條件刪除
DELETE FROM stu WHERE name = '小明' OR age = 21;
-- 更新
UPDATE stu SET name = 'mmmm';
UPDATE stu SET name = 'xxx' WHERE id > 3;
UPDATE stu SET name = 'yyy', age = 100 WHERE name = 'mmmm';
-- 基礎查詢
SELECT * FROM stu;
SELECT id, age FROM stu;
SELECT id, age, name FROM stu WHERE id > 2 AND id < 5;
-- 排序
SELECT * FROM stu ORDER BY id; -- 升序
SELECT * FROM stu ORDER BY age DESC; -- 降序
-- 分組聚合
SELECT sex, COUNT(*) AS 性別人數 FROM stu GROUP BY sex;
SELECT sex, AVG(age) FROM stu GROUP BY sex;
SELECT sex, MAX(age) FROM stu GROUP BY sex;
-- IN / NOT IN
SELECT * FROM stu WHERE id IN (19, 25, 23);
SELECT * FROM stu WHERE id NOT IN (19, 25, 23);
-- 多條件組合
SELECT * FROM stu WHERE sex = 'M' AND id NOT IN (19, 30);
| 約束 | 關鍵字 | 示例 |
|---|---|---|
| 主鍵 | PRIMARY KEY | id INT PRIMARY KEY AUTO_INCREMENT |
| 非空 | NOT NULL | name CHAR(6) NOT NULL |
| 唯一 | UNIQUE | IdCardNo CHAR(20) UNIQUE |
| 外鍵 | FOREIGN KEY ... REFERENCES | REFERENCES class(classname) ON DELETE CASCADE |
| 檢查 | CHECK | CHECK (age > 0 AND age < 120) |
| 默認值 | DEFAULT | status INT DEFAULT 1 |
CREATE TABLE people (
id INT PRIMARY KEY AUTO_INCREMENT,
name CHAR(10),
sex CHAR(1),
myyear YEAR,
mydate DATE,
mytime TIME
);
表名在 Windows 下不區分大小寫,Linux 下區分(受 lower_case_table_names 參數控制)。關鍵字、函數名、列名均不區分大小寫。
DELETE FROM stu;:逐行刪除,觸發 Trigger,自增計數器不歸零,可回滾。TRUNCATE TABLE stu;:直接釋放數據頁,重置自增計數器,不可回滾,速度極快。建議收藏本文作為日常開發速查表,熟練掌握上述語句可覆蓋 90% 以上的業務開發場景。