首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫

MySQL SQL 語句分類完整指南:DDL、DQL、DML、DCL 與常用操作彙總

     編輯:MySQL 資料庫相關知識

SQL 語句按功能分為四大類,本文系統整理各類核心命令、語法範例與常見易混淆點(如 DROP vs DELETE),並附贈建表、索引、約束、增刪改查、聚合、連接查詢速查表。

四大分類

類別全稱核心命令典型操作
DDLData Definition LanguageCREATE, ALTER, DROP, RENAME, TRUNCATE建立/修改/刪除資料庫、表、索引、視圖
DQLData Query LanguageSELECT查詢數據(含子查詢、JOIN、UNION)
DMLData Manipulation LanguageINSERT, UPDATE, DELETE增刪改數據行
DCLData Control LanguageGRANT, REVOKE授權/回收用戶權限

易混淆點:DROP vs DELETE vs TRUNCATE

命令作用對象可回滾觸發 Trigger重置自增速度
DROP結構(庫/表/索引)否否是最快
TRUNCATE表中所有行否否是快
DELETE符合條件的行是 (事務中)是否慢

**口訣**:結構刪用 DROP,全表清空用 TRUNCATE,條件刪行用 DELETE。

核心 DDL 語法速查

資料庫與表

CREATE DATABASE db_name;
DROP DATABASE db_name;
USE db_name;

CREATE TABLE student (
  id INT PRIMARY KEY,
  name VARCHAR(50) NOT NULL,
  age INT DEFAULT 0
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

ALTER TABLE student ADD email VARCHAR(100);
ALTER TABLE student MODIFY name VARCHAR(60);
ALTER TABLE student DROP COLUMN email;
DROP TABLE student;

索引

CREATE INDEX idx_name ON student(name);
CREATE UNIQUE INDEX uk_email ON student(email);
DROP INDEX idx_name ON student;

約束完整性實現

約束關鍵字說明
非空NOT NULL列級
主鍵PRIMARY KEY唯一+非空,表級/列級
唯一UNIQUE允許一個 NULL
預設值DEFAULT如 status TINYINT DEFAULT 1
檢查CHECKMySQL 8.0.16+ 生效
自增AUTO_INCREMENT整數主鍵常用
外鍵FOREIGN KEY需 InnoDB,參考主鍵/唯一鍵

DML 增刪改核心語法

-- 插入單行
INSERT INTO student (id, name, age) VALUES (1, '張三', 20);

-- 多行插入
INSERT INTO student (id, name, age) VALUES (2,'李四',21), (3,'王五',22);

-- 從查詢結果插入
INSERT INTO student_archive SELECT * FROM student WHERE age > 25;

-- 更新
UPDATE student SET age = 21, name = '張三丰' WHERE id = 1;

-- 刪除
DELETE FROM student WHERE id = 1;
-- 全表刪除(保留結構)
TRUNCATE TABLE student;

DQL 查詢進階

基礎查詢

SELECT id, name FROM student;
SELECT * FROM student;
SELECT id AS student_id, name AS student_name FROM student;  -- 別名
SELECT DISTINCT age FROM student;  -- 去重
SELECT id, name, age * 12 AS age_months FROM student;  -- 計算列

條件與排序

SELECT * FROM student WHERE age BETWEEN 18 AND 25;
SELECT * FROM student WHERE name IN ('張三','李四');
SELECT * FROM student WHERE name LIKE '張%';  -- % 多字元, _ 單字元
SELECT * FROM student WHERE email IS NULL;
SELECT * FROM student ORDER BY age DESC, id ASC;

聚合與分組

SELECT COUNT(*) FROM student;
SELECT AVG(age), MAX(age), MIN(age), SUM(age) FROM student;

SELECT class_id, COUNT(*), AVG(age)
FROM student
GROUP BY class_id
HAVING AVG(age) > 20;

集合運算

SELECT name FROM student UNION SELECT name FROM teacher;  -- 去重合併
SELECT name FROM student UNION ALL SELECT name FROM teacher;  -- 保留重複
SELECT name FROM student INTERSECT SELECT name FROM teacher;  -- 交集 (MySQL 8.0+)
SELECT name FROM student EXCEPT SELECT name FROM teacher;  -- 差集 (MySQL 8.0+)

連接查詢 (JOIN)

類型關鍵字結果特徵
內連接INNER JOIN / JOIN僅匹配行,無 NULL
左外連接LEFT JOIN / LEFT OUTER JOIN左表全保留,右表無匹配則 NULL
右外連接RIGHT JOIN / RIGHT OUTER JOIN右表全保留,左表無匹配則 NULL
全外連接FULL JOIN / FULL OUTER JOINMySQL **不支援**,用 LEFT UNION RIGHT 模擬
SELECT s.name, c.class_name
FROM student s
LEFT JOIN class c ON s.class_id = c.id;

權限管理 (DCL)

GRANT SELECT, INSERT ON db.* TO 'user'@'%' IDENTIFIED BY 'pwd';
REVOKE INSERT ON db.* FROM 'user'@'%';
FLUSH PRIVILEGES;
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved