当前位置 主页 > 技术大全 >

    mysql语法, 常用语法的系统梳理

    栏目:技术大全 时间:2025-09-15 16:23


    MySQL 语法是操作 MySQL 数据库的基础,涵盖数据查询、插入、更新、删除、表结构管理等核心操作。以下是 MySQL 常用语法的系统梳理,按功能分类讲解,附带示例便于理解:

    一、数据库操作语法

    1. 创建数据库

    sql
    CREATE DATABASE [IF NOT EXISTS] 数据库名 [CHARACTER SET 字符集] [COLLATE 排序规则];
    
     

    • IF NOT EXISTS:避免数据库已存在时报错;
    • 常用字符集:utf8mb4(支持 emoji)、utf8

    示例:创建 test_db 数据库,使用 utf8mb4 字符集:

    sql
    CREATE DATABASE IF NOT EXISTS test_db CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci;
    
     

    2. 查看数据库

    sql
    -- 查看所有数据库
    SHOW DATABASES;
    
    -- 查看当前使用的数据库
    SELECT DATABASE();
    
     

    3. 切换数据库

    sql
    USE 数据库名;
    
     

    4. 删除数据库

    sql
    DROP DATABASE [IF EXISTS] 数据库名;
    
     

    • 警告:删除数据库会删除所有表和数据,操作需谨慎。

    二、表结构操作语法(DDL)

    1. 创建表

    sql
    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 表:

    sql
    CREATE TABLE IF NOT EXISTS user (
      id INT AUTO_INCREMENT PRIMARY KEY,  -- 自增主键
      name VARCHAR(50) NOT NULL,         -- 非空姓名
      age INT DEFAULT 0,                 -- 默认年龄0
      phone VARCHAR(20) UNIQUE,          -- 唯一手机号
      create_time DATETIME DEFAULT NOW() -- 默认当前时间
    ) ENGINE=InnoDB CHARACTER SET utf8mb4;
    
     

    2. 查看表结构

    sql
    -- 查看表基本结构
    DESCRIBE 表名;  -- 或 DESC 表名
    
    -- 查看表创建语句(含详细结构)
    SHOW CREATE TABLE 表名;
    
     

    3. 修改表结构(ALTER TABLE

    sql
    -- 添加字段
    ALTER TABLE 表名 ADD 新字段 数据类型 [约束];
    
    -- 修改字段(类型/约束)
    ALTER TABLE 表名 MODIFY 字段名 新数据类型 [新约束];
    
    -- 修改字段名(同时可改类型)
    ALTER TABLE 表名 CHANGE 旧字段名 新字段名 新数据类型 [约束];
    
    -- 删除字段
    ALTER TABLE 表名 DROP 字段名;
    
    -- 修改表名
    ALTER TABLE 旧表名 RENAME TO 新表名;
    
     

    示例:给 user 表添加 email 字段:

    sql
    ALTER TABLE user ADD email VARCHAR(100) UNIQUE;
    
     

    4. 删除表

    sql
    DROP TABLE [IF EXISTS] 表名;
    
     

    三、数据操作语法(DML)

    1. 插入数据(INSERT

    sql
    -- 插入单条数据(指定字段)
    INSERT INTO 表名 (字段1, 字段2, ...) VALUES (1,2, ...);
    
    -- 插入多条数据
    INSERT INTO 表名 (字段1, 字段2, ...) 
    VALUES 
      (1,2, ...),
      (3,4, ...);
    
    -- 插入所有字段(顺序与表结构一致)
    INSERT INTO 表名 VALUES (1,2, ...);
    
     

    示例:插入用户数据:

    sql
    INSERT INTO user (name, age, phone) 
    VALUES 
      ('张三', 25, '13800138000'),
      ('李四', 30, '13900139000');
    
     

    2. 查询数据(SELECT

    sql
    SELECT 字段1, 字段2, ...  -- 或用 * 表示所有字段
    FROM 表名
    [WHERE 条件]             -- 过滤行
    [GROUP BY 分组字段]       -- 按字段分组
    [HAVING 分组条件]         -- 过滤分组
    [ORDER BY 排序字段 [ASC|DESC]]  -- 排序
    [LIMIT 起始位置, 条数];   -- 限制结果数量
    
     

    示例:查询年龄大于 25 的用户,按年龄降序:

    sql
    SELECT id, name, age 
    FROM user 
    WHERE age > 25 
    ORDER BY age DESC;
    
     

    3. 更新数据(UPDATE

    sql
    UPDATE 表名
    SET 字段1 =1, 字段2 =2, ...
    [WHERE 条件];  -- 务必加条件,否则更新所有行!
    
     

    示例:将 id=1 的用户年龄改为 26:

    sql
    UPDATE user SET age = 26 WHERE id = 1;
    
     

    4. 删除数据(DELETE

    sql
    DELETE FROM 表名
    [WHERE 条件];  -- 务必加条件,否则删除所有数据!
    
     

    示例:删除手机号为 13800138000 的用户:

    sql
    DELETE FROM user WHERE phone = '13800138000';
    
     

    四、索引操作语法

    1. 创建索引

    sql
    -- 普通索引
    CREATE INDEX 索引名 ON 表名(字段名);
    
    -- 唯一索引(字段值唯一)
    CREATE UNIQUE INDEX 索引名 ON 表名(字段名);
    
    -- 联合索引(多字段组合)
    CREATE INDEX 索引名 ON 表名(字段1, 字段2);
    
     

    示例:给 user 表的 phone 字段创建唯一索引:

    sql
    CREATE UNIQUE INDEX idx_user_phone ON user(phone);
    
     

    2. 查看索引

    sql
    SHOW INDEX FROM 表名;
    
     

    3. 删除索引

    sql
    DROP INDEX 索引名 ON 表名;
    
     

    五、条件查询语法(WHERE 子句)

    常用运算符:

    • 比较:=(等于)、!=/<>(不等于)、><>=<=
    • 范围:BETWEEN ... AND ...(在范围内)、IN (值1, 值2)(在列表中);
    • 模糊匹配:LIKE% 匹配任意字符,_ 匹配单个字符);
    • 逻辑:AND(且)、OR(或)、NOT(非);
    • 空值:IS NULL(为空)、IS NOT NULL(不为空)。

    示例

    sql
    -- 查询年龄在 20-30 之间,且姓名含“张”的用户
    SELECT * FROM user 
    WHERE age BETWEEN 20 AND 30 
      AND name LIKE '%张%';
    
     

    六、表连接语法(JOIN

    用于关联多表查询:

    sql
    -- 内连接(只保留匹配记录)
    SELECT 字段 FROM1 INNER JOIN2 ON1.字段 =2.字段;
    
    -- 左连接(保留左表所有记录)
    SELECT 字段 FROM1 LEFT JOIN2 ON1.字段 =2.字段;
    
    -- 右连接(保留右表所有记录)
    SELECT 字段 FROM1 RIGHT JOIN2 ON1.字段 =2.字段;
    
     

    示例:关联 user 表和 order 表查询用户的订单:

    sql
    SELECT u.name, o.id AS order_id 
    FROM user u 
    LEFT JOIN `order` o ON u.id = o.user_id;
    
     

    七、常用函数

    1. 字符串函数

    • CONCAT(str1, str2):拼接字符串;
    • LENGTH(str):获取字符串长度;
    • UPPER(str)/LOWER(str):转大小写。

    2. 数值函数

    • SUM(字段):求和;
    • AVG(字段):平均值;
    • MAX(字段)/MIN(字段):最大 / 最小值;
    • COUNT(字段):计数(COUNT(*) 统计所有行)。

    3. 日期函数

    • NOW():当前日期时间;
    • CURDATE():当前日期;
    • DATEDIFF(date1, date2):两个日期相差天数。

    示例:统计每个用户的订单总数:

    sql
    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;
    
     

    八、语法规范

    1. 关键字不区分大小写(推荐大写,增强可读性);
    2. 语句以分号(;)结束;
    3. 表名 / 字段名若为关键字,需用反引号()包裹(如 orderdesc`);
    4. 字符串值需用单引号(')包裹(如 '张三')。

    掌握以上基础语法,可完成 MySQL 大部分日常操作,复杂场景(如存储过程、事务)可在此基础上进一步学习。
1分钟搞定MySQL部署!Docker最强实操指南,含所有常用命令和配置
忘记MySQL密码怎么办?别慌!用这一招跳过验证,轻松重置管理员权限
MySQL自增主键用完怎么办?从原理到实战,全面破解开发中的高频难题
MySQL权限混乱?这几个命令让你彻底理清用户清单与权限归属
你的数据库安全吗?读懂MySQL这几种日志,关键时刻能「救你一命」
MySQL性能上不去?八成是这里没配好!手把手教你搞定my.cnf核心配置
修改MySQL字段长度别乱来!这3个核心要点和1个致命陷阱,新手必看
MySQL单表卡爆怎么办?从策略到实战,一文掌握「分表」救命技巧
你的MySQL数据库为什么总是又慢又卡?掌握这五大优化法则,查询速度快十倍!(上篇)
你的MySQL数据库为什么总是又慢又卡?掌握这五大优化法则,查询速度快十倍!(下篇)