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

SQL 表数据的增删与替换操作详解

讲解 SQL 表数据的增删操作。涵盖 CREATE、INSERT(全列/指定列/冲突处理)、DELETE 与 TRUNCATE 的区别。重点对比了 REPLACE 与 ON DUPLICATE KEY UPDATE 的逻辑差异:前者删旧插新影响自增 ID,后者原地更新保留 ID。同时说明 DELETE 不重置自增 ID,TRUNCATE 重置且不可回滚,强调两者均保留表结构。

云间运维发布于 2026/3/23更新于 2026/10/82.3K 浏览
SQL 表数据的增删与替换操作详解

SQL 表数据的增删操作详解

1. 增

1.1 CREATE

CREATE 语句用于创建数据表。

1.2 全列插入

全列插入指为表中的每一列都提供值。

1.3 指定列插入

指定列插入只给部分列赋值,未指定的列默认为 NULL。

1.4 插入否则更新(ON DUPLICATE KEY UPDATE)

具体语法:

INSERT ... ON DUPLICATE KEY UPDATE column = value [, column = value] ...

当插入的主键或唯一键值已存在时,直接报错。使用此指令可在冲突时更新现有行。

1.5 替换(REPLACE)

主键 或者 唯一键 没有冲突,则直接插入;

主键 或者 唯一键 如果冲突,则删除后再插入

若无冲突则直接插入。若冲突则先删除旧行再插入新行。可通过受影响行数判断:1 表示插入,2 表示删除后插入。

1.7 duplicate 和 replace 的区别

1.7.1 核心操作逻辑不同
  • REPLACE:冲突时先删除旧行,再插入新行。等价于 DELETE + INSERT。
  • ON DUPLICATE KEY UPDATE:冲突时不删除,直接更新指定字段。等价于 UPDATE。
1.7.2 对自增主键的影响不同
  • REPLACE:生成新的自增 ID,原有 ID 废弃。
  • ON DUPLICATE KEY UPDATE:保持原有自增 ID 不变。
1.7.3 对未指定字段的处理不同
  • REPLACE:未指定字段使用默认值,覆盖原值。
  • ON DUPLICATE KEY UPDATE:未指定字段保持原值不变。
1.7.4 示例对比

假设表 student 有数据 (id=1, name='Tom', score=80)。

使用 ON DUPLICATE KEY UPDATE:

INSERT INTO student (name, score) VALUES ('Tom', 90) ON DUPLICATE KEY UPDATE score = VALUES(score);

结果:(1, 'Tom', 90),ID 不变。

使用 REPLACE:

REPLACE INTO student (name, score) VALUES ('Tom', 90);

结果:(2, 'Tom', 90),ID 变为 2。

1.7.5 适用场景
  • REPLACE:需完全替换行,接受 ID 变化。
  • ON DUPLICATE KEY UPDATE:需保留 ID 和部分数据,效率更高。
总结

REPLACE 是'删旧插新',改变行存在性和 ID;ON DUPLICATE KEY UPDATE 是'原地更新',仅修改字段。根据需求选择。

2. 删

2.1 删除数据(DELETE)

语法:

DELETE FROM table_name [WHERE ...] [ORDER BY ...] [LIMIT ...]

DELETE 可删除特定行或整表数据。

-- 查看原数据
SELECT * FROM exam_result WHERE name = '孙悟空';
-- 删除数据
DELETE FROM exam_result WHERE name = '孙悟空';
-- 查看删除结果
SELECT * FROM exam_result WHERE name = '孙悟空';

PS: DELETE 不会重置 AUTO_INCREMENT 计数器,删除后再次插入数据时,ID 会继续递增。

2.2 截断表(TRUNCATE)

语法:

TRUNCATE [TABLE] table_name

注意:慎用

  1. 只能整表操作,不能针对部分数据。
  2. 速度快,但不经过事务,无法回滚。
  3. 会重置 AUTO_INCREMENT 项。

2.3 删除的注意点

DELETE 和 TRUNCATE 都只删除表中的数据,表的结构(列定义、索引、约束等)会被完整保留。

  • DELETE:仅删除行,元数据不变。
  • TRUNCATE:清空内容但保留容器,重置自增 ID。

目录

  1. SQL 表数据的增删操作详解
  2. 1. 增
  3. 1.1 CREATE
  4. 1.2 全列插入
  5. 1.3 指定列插入
  6. 1.4 插入否则更新(ON DUPLICATE KEY UPDATE)
  7. 1.5 替换(REPLACE)
  8. 1.7 duplicate 和 replace 的区别
  9. 1.7.1 核心操作逻辑不同
  10. 1.7.2 对自增主键的影响不同
  11. 1.7.3 对未指定字段的处理不同
  12. 1.7.4 示例对比
  13. 1.7.5 适用场景
  14. 总结
  15. 2. 删
  16. 2.1 删除数据(DELETE)
  17. 2.2 截断表(TRUNCATE)
  18. 2.3 删除的注意点

更多推荐文章

查看全部
  • OpenClaw 系列 AI Agent 工具选型指南
  • Python 在 Windows、macOS 和 Linux 平台上的安装与配置指南
  • macOS 命令行工具详解与使用指南
  • Docker 镜像源列表与加速配置指南
  • Python 基础入门:核心数据类型与特性详解
  • Axure 制作 AI 自动对话机器人原型教程
  • 基于 Claude Code 的 AI 内容创作工作流构建与实践
  • Java 高频面试题整理
  • Linux 下 Git 版本控制实战:核心三板斧详解
  • Raphael AI:基于 Flux 模型的免费图像生成工具评测
  • AI 大模型开发者必读书籍:《GPT 图解大模型是怎样构建的》
  • Python 3.14 环境下 PyAudio 安装全指南:解决兼容性与依赖问题
  • Ubuntu 安装 vLLM:GPU 到 CPU 的三种方案
  • Hadoop 集群启动常见异常排查与解决
  • Ghostty + Yazi + Lazygit 构建现代化终端开发工作流
  • 分布式 Redis 集群架构设计与生产级部署
  • DeepSeek 深度使用技巧与本地知识库搭建
  • GTC2026 前瞻:Agentic AI、开源模型与 Physical AI 机器人
  • 戴在眼前的议程管家:基于 Rokid AR 眼镜的会议纪要助手开发实录
  • Java 算法:前缀和进阶应用

相关免费在线工具

  • 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