MySQL 語法是操作 MySQL 數據庫的基礎,涵蓋數據查詢、插入、更新、刪除、表結構管理等核心操作。以下是 MySQL 常用語法的系統梳理,按功能分類講解,附帶示例便于理解:
CREATE DATABASE [IF NOT EXISTS] 數據庫名 [CHARACTER SET 字符集] [COLLATE 排序規則];
-
IF NOT EXISTS:避免數據庫已存在時報錯;
-
常用字符集:
utf8mb4(支持 emoji)、utf8。
示例:創建 test_db 數據庫,使用 utf8mb4 字符集:
CREATE DATABASE IF NOT EXISTS test_db CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci;
SHOW DATABASES;
SELECT DATABASE();
DROP DATABASE [IF EXISTS] 數據庫名;
CREATE TABLE [IF NOT EXISTS] 表名 (
字段1 數據類型 [約束條件],
字段2 數據類型 [約束條件],
...
[PRIMARY KEY (主鍵字段)],
[KEY 索引名 (索引字段)]
) [ENGINE=存儲引擎] [CHARACTER SET 字符集];
-
常用數據類型:
INT(整數)、VARCHAR(長度)(字符串)、DATETIME(日期時間)、DECIMAL(總長度, 小數位)(浮點數);
-
常用約束:
NOT NULL(非空)、PRIMARY KEY(主鍵)、FOREIGN KEY(外鍵)、UNIQUE(唯一)、DEFAULT(默認值)。
示例:創建 user 表:
CREATE TABLE IF NOT EXISTS user (
id INT AUTO_INCREMENT PRIMARY KEY,
name VARCHAR(50) NOT NULL,
age INT DEFAULT 0,
phone VARCHAR(20) UNIQUE,
create_time DATETIME DEFAULT NOW()
) ENGINE=InnoDB CHARACTER SET utf8mb4;
DESCRIBE 表名;
SHOW CREATE TABLE 表名;
ALTER TABLE 表名 ADD 新字段 數據類型 [約束];
ALTER TABLE 表名 MODIFY 字段名 新數據類型 [新約束];
ALTER TABLE 表名 CHANGE 舊字段名 新字段名 新數據類型 [約束];
ALTER TABLE 表名 DROP 字段名;
ALTER TABLE 舊表名 RENAME TO 新表名;
示例:給 user 表添加 email 字段:
ALTER TABLE user ADD email VARCHAR(100) UNIQUE;
DROP TABLE [IF EXISTS] 表名;
INSERT INTO 表名 (字段1, 字段2, ...) VALUES (值1, 值2, ...);
INSERT INTO 表名 (字段1, 字段2, ...)
VALUES
(值1, 值2, ...),
(值3, 值4, ...);
INSERT INTO 表名 VALUES (值1, 值2, ...);
示例:插入用戶數據:
INSERT INTO user (name, age, phone)
VALUES
('張三', 25, '13800138000'),
('李四', 30, '13900139000');
SELECT 字段1, 字段2, ...
FROM 表名
[WHERE 條件]
[GROUP BY 分組字段]
[HAVING 分組條件]
[ORDER BY 排序字段 [ASC|DESC]]
[LIMIT 起始位置, 條數];
示例:查詢年齡大于 25 的用戶,按年齡降序:
SELECT id, name, age
FROM user
WHERE age > 25
ORDER BY age DESC;
UPDATE 表名
SET 字段1 = 值1, 字段2 = 值2, ...
[WHERE 條件];
示例:將 id=1 的用戶年齡改為 26:
UPDATE user SET age = 26 WHERE id = 1;
DELETE FROM 表名
[WHERE 條件];
示例:刪除手機號為 13800138000 的用戶:
DELETE FROM user WHERE phone = '13800138000';
CREATE INDEX 索引名 ON 表名(字段名);
CREATE UNIQUE INDEX 索引名 ON 表名(字段名);
CREATE INDEX 索引名 ON 表名(字段1, 字段2);
示例:給 user 表的 phone 字段創建唯一索引:
CREATE UNIQUE INDEX idx_user_phone ON user(phone);
常用運算符:
-
比較:
=(等于)、!=/<>(不等于)、>、<、>=、<=;
-
范圍:
BETWEEN ... AND ...(在范圍內)、IN (值1, 值2)(在列表中);
-
模糊匹配:
LIKE(% 匹配任意字符,_ 匹配單個字符);
-
邏輯:
AND(且)、OR(或)、NOT(非);
-
空值:
IS NULL(為空)、IS NOT NULL(不為空)。
示例:
SELECT * FROM user
WHERE age BETWEEN 20 AND 30
AND name LIKE '%張%';
用于關聯多表查詢:
SELECT 字段 FROM 表1 INNER JOIN 表2 ON 表1.字段 = 表2.字段;
SELECT 字段 FROM 表1 LEFT JOIN 表2 ON 表1.字段 = 表2.字段;
SELECT 字段 FROM 表1 RIGHT JOIN 表2 ON 表1.字段 = 表2.字段;
示例:關聯 user 表和 order 表查詢用戶的訂單:
SELECT u.name, o.id AS order_id
FROM user u
LEFT JOIN `order` o ON u.id = o.user_id;
-
CONCAT(str1, str2):拼接字符串;
-
LENGTH(str):獲取字符串長度;
-
UPPER(str)/LOWER(str):轉大小寫。
-
SUM(字段):求和;
-
AVG(字段):平均值;
-
MAX(字段)/MIN(字段):最大 / 最小值;
-
COUNT(字段):計數(COUNT(*) 統計所有行)。
-
NOW():當前日期時間;
-
CURDATE():當前日期;
-
DATEDIFF(date1, date2):兩個日期相差天數。
示例:統計每個用戶的訂單總數:
SELECT u.id, u.name, COUNT(o.id) AS order_count
FROM user u
LEFT JOIN `order` o ON u.id = o.user_id
GROUP BY u.id, u.name;
-
關鍵字不區分大小寫(推薦大寫,增強可讀性);
-
語句以分號(
;)結束;
-
表名 / 字段名若為關鍵字,需用反引號(
)包裹(如 order、desc`);
-
字符串值需用單引號(
')包裹(如 '張三')。
掌握以上基礎語法,可完成 MySQL 大部分日常操作,復雜場景(如存儲過程、事務)可在此基礎上進一步學習。