SQL的insert和update二合一指令

有一个config表单,以PNStr字符串做判断标准,如果该PNStr不存在,就insert一条新记录;如果PN已存在,就update一条新记录。

以往,我都是先执行select PN from config where PN='PN123',如果报错,就说明该PNStr不存在,那就可以insert一条新记录;如果没报错,就update一条新记录。

今天问了豆包,说可以直接用"INSERT ... ON DUPLICATE KEY UPDATE"指令,即可一条指令自动实现insert或update。但是,豆包并没有强调还有一个前提,需要先把作为判断条件的PN字段,配置成唯一索引,导致我insert了几条同名PN的记录。

为了将PN字段配置成唯一索引,需要逐一执行如下步骤:

步骤 1:确保表单中没有同名PN,有就删掉

步骤 2:先移除 ID 的自增属性(关键前置操作)

ALTER TABLE config MODIFY COLUMN ID INT;

步骤 3:现在可以安全删除复合主键

ALTER TABLE config DROP PRIMARY KEY;

步骤 4:把 ID 设为单独主键,重新开启自增

ALTER TABLE config ADD PRIMARY KEY (ID);

ALTER TABLE config MODIFY COLUMN ID INT AUTO_INCREMENT;

步骤 5:给 PN 建立唯一索引(实现重复 PN 触发更新)

ALTER TABLE config ADD UNIQUE INDEX uk_config_pn (PN);

配好之后,在Navicat中config表单点右键选"设计表"的"索引"标签页,就能看到这样范儿的:

总所周知的,ID是自增1的主键,它和表单中其他唯一索引并不冲突。而且PN作为唯一索引,就暗含了一条规则,不能为空,也不能重复。注意,一张表单,只能有一个主键,但可以有 N 个唯一索引,多个字段分别保证不重复是非常常见的设计。

特性 主键 PRIMARY KEY(你的 ID) 唯一索引 UNIQUE(你的 PN)

允许 NULL 绝对不允许 不允许 NULL(你 PN 勾选了非空);若不勾选可存 1 个 NULL

数量限制 一张表只能有 1 组主键 一张表可以建多个唯一索引

索引特性 本质是特殊的唯一索引,自带 NOT NULL 独立约束,仅限制字段值不重复

业务作用 全局行唯一标识(自增 ID,用于关联、分页) 业务字段唯一性约束(一个 PN 只能存一条配置)

豆包给的二合一SQL指令如下。

INSERT INTO config (DUT_Type, PN)

VALUES ('VAPD', 'BM1001-4301-7611')

ON DUPLICATE KEY UPDATE

DUT_Type = VALUES(DUT_Type);

试过了,当PN唯一索引冲突时,就会更新PNStr所在记录的DUT_Type字段值;否则视为新来了一个PNStr,就insert一条新记录。很好用,代码也简洁多了,后悔没有早点问豆包。AI平权,王侯将相宁有种乎?

相关推荐
心易行者3 分钟前
Python自动化测试7步落地法:用python在线运行省掉90%环境配置时间
java·开发语言·人工智能·python·log4j·ai编程
数字智核20 分钟前
2026昆山工厂空压机突然停机怎么办?找谁抢修
服务器·网络·数据库
AAA代码批发商40 分钟前
Days 39 Linux C 开发之 SQLite 数据库完整学习笔记
linux·c语言·数据库
笑梦无境41 分钟前
mysql的安装及配置(3)
数据库·mysql·adb
电商API_1800790524741 分钟前
跨境1688代采商家,如何借助API打通供应链,实现效率跃迁
大数据·数据库·网络爬虫
小雪崩42 分钟前
嵌入式学习 day40:数据库
数据库·学习
霸道流氓气质1 小时前
Spring AI 技术细节:VectorStore 多库统一抽象
java·人工智能·spring
今天AI了吗1 小时前
Codex 配置自定义 AI API 完整指南:从零到一接入你的专属模型
java·人工智能·python·数据分析·embedding
Aloudata1 小时前
语义层 vs MCP 工具层:Agent 调用数据时,语义应该放在哪一层
数据库·数据分析·chatbi·data agent·语义层
zcmodeltech1 小时前
源网荷储一体化沙盘模型多场景控制系统设计——基于STM32与Modbus RTU的源网荷储、多能互补、冷热电三联供全场景联动方案,服务范围覆盖全国
数据库·人工智能·stm32·单片机·嵌入式硬件