SQL之表的增删 - 指南

news/2025/11/23 10:10:20/文章来源:https://www.cnblogs.com/gccbuaa/p/19259565

目录

1.增

1.1 create

1.2 全列插入

1.3 指定列插入

1.4 插入否则更新(duplicate)

1.5 替换(replace)

1.7 deplicate和replace的区别

1.7.1 核心操作逻辑不同

1.7.2 对自增主键的影响不同

1.7.3 对未指定字段的处理不同

1.7.4 示例对比

1.7.5 适用场景

总结

2. 删

2.1 删除表(delete)

2.2 截断表(truncate)

2.3 删除的注意点


今天我们来聊一下表的增删。对于数据表来说,数据是非常重要的,所以关于数据的增删也是肥城重要的。

1.增

1.1 create

下面这张图就是create的使用方式。

1.2 全列插入

下面这张图就是全列插入,意思就是说给这张表里面的每一个数据都插入值。

1.3 指定列插入

下面这张图就是指定列插入,我们在这里给a1和a2插入了值。那么我们在查看的时候就会发现在这张表的第二行的a3位置就是NULL。

1.4 插入否则更新(duplicate)

具体语法:

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

我们在插入值的时候如果给主键或唯一键插入了一样的值那么就会报错。就像下面这样。

这个时候我们就可以使用这个指令在发生冲突的时候来进行更新,通过额外添加的 on duplicate key update a2=15,a3=150;我们就可以实现修改其已被主键占用的那一行值。

1.5 替换(replace)

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

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

当主键或者唯一键没用冲突的时候它就会直接插入数据。

我们看下面这张图,我们使用replace那么就可以直接更改主键的那一行值。

我们也可以根据指令执行完后的那一行语句来确定是直接插入还是删除后插入。

-- 1 row affected: 表中没有冲突数据,数据被插入

-- 2 row affected: 表中有冲突数据,删除后重新插入

1.7 deplicate和replace的区别

1.7.1 核心操作逻辑不同

  • REPLACE:当插入的数据与表中现有数据发生唯一键冲突时,会先删除表中已存在的冲突行,然后插入新行。本质上等价于执行了 DELETE + INSERT 两个操作。

  • ON DUPLICATE KEY UPDATE:当插入的数据发生唯一键冲突时,不会删除原有行,而是直接更新原有行中指定的字段。本质上等价于执行了 UPDATE 操作(仅针对冲突行)。

1.7.2 对自增主键的影响不同

  • REPLACE:由于会先删除冲突行再插入新行,若表使用自增主键,新插入的行会生成新的自增 ID原有 ID 被废弃,不会重复使用)。例如:原有行 id=1 冲突,REPLACE 后新行可能是 id=2(自增 ID 递增)。

  • ON DUPLICATE KEY UPDATE:仅更新原有行,不会删除数据,因此自增主键的值保持不变。例如:原有行 id=1 冲突,更新后仍为 id=1

1.7.3 对未指定字段的处理不同

  • REPLACE:插入新行时,若新数据中未明确指定某些字段,这些字段会使用表定义的默认值(或 NULL),覆盖原有行的值。例如:原有行有 age=20,但 REPLACE 语句未指定 age,则新行的 age 会变为默认值(如 NULL)。

  • ON DUPLICATE KEY UPDATE:仅更新 UPDATE 子句中明确指定的字段,未指定的字段保持原有值不变。例如:原有行 age=20UPDATE 仅指定更新 name,则 age 仍为 20。

1.7.4 示例对比

假设有表 student 结构如下:

CREATE TABLE student (id INT PRIMARY KEY AUTO_INCREMENT,name VARCHAR(50) UNIQUE, -- 唯一索引,可能冲突score INT
);

已有数据:(id=1, name='Tom', score=80)

场景:插入 name='Tom' 的新数据(冲突)

  • 使用 REPLACE

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

    执行后结果:

    • 原有行 (1, 'Tom', 80) 被删除。

    • 插入新行 (2, 'Tom', 90)(id 变为 2,自增 ID 递增)。

  • 使用 ON DUPLICATE KEY UPDATE

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

    执行后结果:

    • 原有行 (1, 'Tom', 80) 被更新为 (1, 'Tom', 90)(id 保持 1,仅更新 score)。

1.7.5 适用场景

  • REPLACE:适合需要完全替换冲突行(包括未指定字段使用默认值)的场景,但需注意自增 ID 变化的影响(可能导致 ID 不连续)。

  • ON DUPLICATE KEY UPDATE:适合仅更新部分字段、保留其他原有数据的场景,效率更高(无需删除操作),且不会改变自增 ID。

总结

两者的核心区别在于:REPLACE 是 “删旧插新”,会改变行的存在性和自增 ID;ON DUPLICATE KEY UPDATE 是 “原地更新”,仅修改指定字段,保留原有行的其他属性。选择时需根据是否需要保留原有数据、自增 ID 是否需不变等需求决定。

2. 删

2.1 删除表(delete)

语法:

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

我们来看下面这行代码,我们可以通过delete这个指令来删除表中的一行。

如果我们把WHERE name = '孙悟空';这句话去掉的话,那么delete就会直接删除掉整张表。

-- 查看原数据 SELECT * FROM exam_result WHERE name = '孙悟空';+----+-----------+-------+--------+--------+
| id | name | chinese | math | english |+----+-----------+-------+--------+--------+
| 2 | 孙悟空 | 174 | 80 | 77 | +
----+-----------+-------+--------+--------+
1 row in set (0.00 sec)
-- 删除数据
DELETE FROM exam_result WHERE name = '孙悟空';
Query OK, 1 row affected (0.17 sec)
-- 查看删除结果
SELECT * FROM exam_result WHERE name = '孙悟空';
Empty set (0.00 sec)

PS:delete是不会让那个auto_increment重新开始计算的,也就是说我们删除一张表之后如果再往里面插入数据的话,

2.2 截断表(truncate)

语法:

TRUNCATE [TABLE] table_name

注意:这个操作慎用

1. 只能对整表操作,不能像 DELETE 一样针对部分数据操作;

2. 实际上 MySQL 不对数据操作,所以比 DELETE 更快,但是TRUNCATE在删除数据的时候,并不经过真正的事物,所以无法回滚

3. 会重置 AUTO_INCREMENT

所以说这个的话就仅做了解即可,因为他不支持数据回滚就意味着无法通过一些常规手段来对数据表进行复原。但是他删除数据的速度很快,在一些已经确定要删除且数据很大的表中很好用。

2.3 删除的注意点

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

具体来说:

  • delete:仅删除表中符合条件的行(或全表行),表的结构、索引、约束等元数据完全不变。
  • truncate:同样只删除数据,表的结构、索引、约束等依然保留(相当于 “清空内容但保留容器”)。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/973711.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

PixPin_cn_zh-cn_2.2.4.0 解锁会员功能

PixPin_cn_zh-cn_2.2.4.0 解锁会员功能 PixAuth.dll 发现关键功能dll,有非常显眼的导出函数:isProUser,序号52其实内部调用序号53 地址 类型 序号 符号 符号(…

左移是不是可以想成指针的移动

字符串要简单就是要跳出字符串吧 我不知道为什么他们写的那么快反正我是过了好几天才优化了这个解法 1.fgets函数读取一整行 scanf会自动到换行符停止的 2.最后的strlen会记录换行符 3.移动n 开头的陷阱一定要取模 4.w…

详细介绍:【优选算法】DC-Mergesort-Harmonies:分治-归并的算法之谐

详细介绍:【优选算法】D&C-Mergesort-Harmonies:分治-归并的算法之谐pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-famil…

2025年11月西安宣传片,西安活动跟拍,西安活动跟拍公司推荐:全流程拍摄服务与性价比优选指南

2025年11月西安宣传片与活动跟拍,选陕西光与影影视文化传播有限公司在2025年11月的西安,城市的魅力在光影中绽放,各类活动精彩纷呈。无论是展现城市风采的宣传片,还是记录活动精彩瞬间的跟拍服务,都需要一家专业且…

2025年11月北京财税机构评价榜单:服务性能与用户口碑评测

在选择财税服务时,许多企业主和财务负责人面临共同挑战。您可能是初创公司创始人,需要快速完成工商注册与税务登记;或是成长型企业管理者,希望优化财税结构并控制成本;也可能是大型企业财务总监,寻求专业外包以提…

详细介绍:破解多数据库并存难题!电科金仓异构多活架构铸就安全底座

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

2025年11月立体库厂家推荐榜:基于资质与案例的五大品牌对比分析

在制造业与物流业持续升级的背景下,企业对仓储空间优化与自动化水平提升的需求日益显著。选择一家可靠的立体库厂家,成为许多企业管理者、物流部门负责人及项目规划人员面临的关键决策。这类用户通常需要解决仓库用地…

2025年11月立体库厂家推荐榜单与客观评价指南

随着制造业与物流业的快速发展,企业对仓储空间利用率和作业效率的要求日益提升,立体库作为智能仓储的核心设备,其选型成为众多企业管理者关注的焦点。选择立体库厂家的用户通常包括工厂运营负责人、物流中心规划师及…

2025年11月西安宣传片,西安活动跟拍,西安活动跟拍公司推荐:影视制作口碑品牌与实力红榜发布

2025年11月西安宣传片与活动跟拍,陕西光与影传媒实力尽显在2025年11月的西安,城市的魅力在光影中不断绽放,宣传片与活动跟拍成为记录这座城市活力与风采的重要方式。而在众多相关服务公司中,陕西光与影影视文化传播…

2025年11月西安宣传片,西安活动跟拍,西安活动跟拍公司推荐:实拍技术实力与定制化服务解析

2025 年 11 月西安宣传片与活动跟拍,陕西光与影传媒实力担当在 2025 年 11 月的西安,城市的每一个角落都散发着独特的魅力,无论是历史古迹的厚重底蕴,还是现代活动的蓬勃活力,都需要专业的镜头去捕捉和呈现。而陕…

【stm32】【Freertos】config详解(2) - 实践

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

V形磁场超时空转换器

V形磁场超时空转换器 时间和空间在客观世界中不是保持不变的。时间会随着空间曲率的增加而变慢。物体移动速度越快,时间就会越慢。当物体速度达到光速时,时间就会停止。但,两者改变的方向和宇宙膨胀的方向一致。也就…

【普中STM32F1xx开发攻略--标准库版】-- 第 9 章 STM32 固件库介绍 - 实践

【普中STM32F1xx开发攻略--标准库版】-- 第 9 章 STM32 固件库介绍 - 实践pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family…

详解Mysql的 sql_mode(SQL 模式)

详解Mysql的 sql_mode(SQL 模式) 详解 MySQL 的 sql_mode(SQL 模式) 一、sql_mode 核心概念 sql_mode 是 MySQL 中语法校验、数据校验、行为兼容的核心配置,它定义了 MySQL 对 SQL 语法的解析规则、数据有效性的…

字符串函数的运用

<!DOCTYPE html> <html lang="zh - CN"><head><meta charset="UTF - 8"><meta name="viewport" content="width=device-width, initial - scale=1.0&q…

关于字符

char存储的就是字符 比较 ‘0’ 计算-‘0’这是很重要的 最后的结果也一定要取模 int main() { int n;scanf("%d",&n); char g[n+2][20];int found=0; int qq[17]={7,9,10,5,8,4,2,1,6,3,7,9,10,5,8,4…

云数据仓库十年架构演进与技术革新

本文深入解析某中心云数据仓库服务十年的技术演进历程,涵盖分布式架构设计、存储计算分离、智能自治优化、多数据源集成等核心技术突破,详细介绍了系统如何通过持续创新实现性能提升和成本优化。云数据仓库十年架构演…

实用指南:QXmlStreamReader、QXmlStreamWriter和QDomElement区别

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

基础电气知识点梳理

2025/11/23电气基础知识点 交直流与安全 1. 交流电(AC) 电流特性:双向周期性变化 安全电压:36V(适配轻微潮湿环境)、42V(干燥环境上限,依据 GB/T 3805-2008) 摆脱电流:10mA(通用参考上限,成人男性均值约 1…

深入解析:缓存查询逻辑及问题解决

深入解析:缓存查询逻辑及问题解决2025-11-23 09:32 tlnshuju 阅读(0) 评论(0) 收藏 举报pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !impo…