跳到主要内容
极客日志极客日志面向AI+效率的开发者社区
首页博客我的书AI学习GitHub 精选镜像AI工具UI配色美学关于
搜索内容 / 工具 / 仓库 / 镜像...⌘K搜索
注册
博客列表
SQL

MySQL 基础:数据创建与查询入门指南

MySQL 数据库中数据的创建与查询基础。内容涵盖 CREATE TABLE 建表语句、INSERT 插入数据的多种方式(全列与指定列)、冲突处理策略(ON DUPLICATE KEY UPDATE 与 REPLACE)。同时详细讲解了 SELECT 查询语法,包括全列与指定列查询、别名使用、去重 DISTINCT、WHERE 条件过滤、ORDER BY 排序以及 LIMIT 分页限制。文章强调了生产环境中避免 SELECT *、注意 WHERE 子句不能使用别名等最佳实践,旨在帮助开发者掌握高效的数据存取操作。

念念不忘发布于 2026/3/30更新于 2026/10/25101 浏览
MySQL 基础:数据创建与查询入门指南

数据创建(Create)

要存储数据,首先需要创建表结构。以下是在 MySQL 命令行中创建一个名为 students 的学生表的示例:

CREATE TABLE students (
    id INT UNSIGNED PRIMARY KEY AUTO_INCREMENT COMMENT '自增主键',
    sn INT NOT NULL UNIQUE COMMENT '学号',
    name VARCHAR(20) NOT NULL COMMENT '姓名',
    qq VARCHAR(20) COMMENT 'QQ 号'
);

插入数据的方式

有了表之后,接下来是插入数据。

方式一:全列插入

如果不写列名,可以直接全列插入。但需注意 VALUES 后面的参数顺序和数量必须与表定义严格一致。

-- id 设置为 NULL 时,由于设置了 AUTO_INCREMENT,MySQL 会自动生成
INSERT INTO students VALUES (100, 10000, '唐三藏', NULL);
INSERT INTO students VALUES (101, 10001, '孙悟空', '11111');
方式二:指定列插入

推荐这种方式。只插入需要的列,更加安全且减少数据传输量。

INSERT INTO students (id, sn, name) VALUES (102, 20001, '曹孟德'), (103, 20002, '孙仲谋');

冲突处理策略

插入数据时可能会遇到主键或唯一键冲突。例如再次插入 id=100 的数据会报错 Duplicate entry。

方案 A:冲突则更新(ON DUPLICATE KEY UPDATE)

如果主键冲突,则执行更新操作。

INSERT INTO students (id, sn, name) VALUES (100, 10010, '唐大师') 
ON DUPLICATE KEY UPDATE sn = 10010, name = '唐大师';

注意:MySQL 返回的 affected rows 含义不同:0 表示未修改,1 表示插入成功,2 表示发生冲突并更新。

方案 B:替换(REPLACE)

逻辑为:无冲突正常插入;有冲突则先删除原记录再插入新记录。

REPLACE INTO students (sn, name) VALUES (20001, '曹阿瞒');

数据查询(Retrieve)

SELECT 语句是 SQL 的核心,语法丰富。演示表 exam_result 如下:

CREATE TABLE exam_result (
    id INT UNSIGNED PRIMARY KEY AUTO_INCREMENT,
    name VARCHAR(20) NOT NULL,
    chinese float DEFAULT 0.0,
    math float DEFAULT 0.0,
    english float DEFAULT 0.0
);

INSERT INTO exam_result (name, chinese, math, english) VALUES 
('唐三藏', 67, 98, 56), ('孙悟空', 87, 78, 77), ('猪悟能', 88, 98, 90), 
('曹孟德', 82, 84, 67), ('刘玄德', 55, 85, 45), ('孙权', 70, 73, 78), ('宋公明', 75, 65, 30);

基础查询技巧

1. 全列查询
SELECT * FROM exam_result;

建议:生产环境中尽量避免使用 *,以减少带宽消耗并利用索引优化。

2. 指定列查询
SELECT id, name, english FROM exam_result;
3. 别名与计算

可以为列起别名,甚至进行计算。

SELECT id, name, chinese + math + english AS 总分 FROM exam_result;
4. 去重(DISTINCT)

查看不重复的数学分数。

SELECT DISTINCT math FROM exam_result;

条件过滤(WHERE)

使用运算符筛选数据,如比较运算符、范围查询、模糊匹配等。

案例:

  • 语文成绩在 [80, 90] 之间:
SELECT name, chinese FROM exam_result WHERE chinese BETWEEN 80 AND 90;
  • 姓孙的同学:
SELECT name FROM exam_result WHERE name LIKE '孙%';

注意:在 WHERE 子句中不能使用 SELECT 中定义的别名。

排序(ORDER BY)

支持升序(ASC,默认)和降序(DESC),支持多字段排序。

SELECT name, math, english FROM exam_result ORDER BY math DESC, english ASC;

提示:ORDER BY 中可以使用别名,这与 WHERE 不同。

分页(LIMIT)

大数据量查询需分页,防止全表扫描导致性能问题。

-- 第一页
SELECT * FROM exam_result LIMIT 3 OFFSET 0;
-- 第二页
SELECT * FROM exam_result LIMIT 3 OFFSET 3;

建议:对陌生大表查询时,养成加 LIMIT 1 的习惯以防卡死数据库。

目录

  1. 数据创建(Create)
  2. 插入数据的方式
  3. 方式一:全列插入
  4. 方式二:指定列插入
  5. 冲突处理策略
  6. 方案 A:冲突则更新(ON DUPLICATE KEY UPDATE)
  7. 方案 B:替换(REPLACE)
  8. 数据查询(Retrieve)
  9. 基础查询技巧
  10. 1. 全列查询
  11. 2. 指定列查询
  12. 3. 别名与计算
  13. 4. 去重(DISTINCT)
  14. 条件过滤(WHERE)
  15. 排序(ORDER BY)
  16. 分页(LIMIT)

更多推荐文章

查看全部
  • 基于 Python 的栅格数据 Theil-Sen 与 Mann-Kendall 趋势分析及显著性检验
  • StableDiffusion-webui 本地部署与使用指南
  • Java8 ConcurrentHashMap 底层数据结构与核心方法流程
  • Chrome 插件开发指南:从 Web 到扩展及实战
  • VSCode 中通过扩展使用 OpenAI 兼容模型配置 GitHub Copilot
  • 基于 Spring Boot 3.5.x + Sa-Token + MyBatis Flex 的企业级文件管理系统 Free-FS
  • AI 核心概念解析:从人工智能到大模型技术详解
  • Spring Boot 消息队列与异步处理
  • Qwen3-0.6B-FP8 跨平台 AI 助手构建:Web/Telegram/Discord 统一后端
  • 前端开发必备技能:AI 辅助设计、工程实践与硬件优化
  • 大语言模型提示工程与高效交互指南
  • Umi 脚手架创建项目实战指南
  • 计算机视觉基础与实战应用
  • Flutter 使用 eip55 库实现鸿蒙系统以太坊地址校验适配
  • OpenCode 开源 AI 编程助手:从入门到精通
  • 基于Python的高性能JSON结构化编辑器架构详解
  • VSCode 本地运行 DeepSeek 模型配置教程
  • 常见 AI 模型与编程术语美式发音速查表
  • 二分算法实战:查找元素首尾位置与区间计数
  • PyMAVLink:无人机通信的Python开发实战指南

相关免费在线工具

  • SQL 美化和格式化

    在线格式化和美化您的 SQL 查询(它支持各种 SQL 方言)。 在线工具,SQL 美化和格式化在线工具,online

  • SQL转CSV/JSON/XML

    解析 INSERT 等受限 SQL,导出为 CSV、JSON、XML、YAML、HTML 表格(见页内语法说明)。 在线工具,SQL转CSV/JSON/XML在线工具,online

  • CSV 工具包

    CSV 与 JSON/XML/HTML/TSV/SQL 等互转,单页多 Tab。 在线工具,CSV 工具包在线工具,online

  • Base64 字符串编码/解码

    将字符串编码和解码为其 Base64 格式表示形式即可。 在线工具,Base64 字符串编码/解码在线工具,online

  • Base64 文件转换器

    将字符串、文件或图像转换为其 Base64 表示形式。 在线工具,Base64 文件转换器在线工具,online

  • Markdown转HTML

    将 Markdown(GFM)转为 HTML 片段,浏览器内 marked 解析;与 HTML转Markdown 互为补充。 在线工具,Markdown转HTML在线工具,online