You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

MySQL如何用单条SQL实现不存在则插入、存在则返回对应id

可以实现,具体写法要看你使用的数据库类型,核心是用数据库原生的**Upsert(插入或更新)**语法实现,相比你现在拆分的写法,还能避免高并发场景下的竞态插入问题。

前提要求

先给full_name字段添加唯一约束,这是冲突检测的基础:

ALTER TABLE `table` ADD UNIQUE INDEX idx_full_name (full_name);

支持RETURNING子句的数据库(PostgreSQL、SQLite 3.35+、Oracle)

可以直接用单条SQL完成,执行后直接返回对应记录的id:

INSERT INTO "table" (full_name)
VALUES ('John')
ON CONFLICT (full_name) DO NOTHING
RETURNING id;

如果是旧版本不支持DO NOTHING,也可以写成DO UPDATE的形式:

INSERT INTO "table" (full_name)
VALUES ('John')
ON CONFLICT (full_name) DO UPDATE SET full_name = EXCLUDED.full_name
RETURNING id;

MySQL/MariaDB场景

MySQL原生不支持RETURNING语法,你可以用ON DUPLICATE KEY UPDATE结合2582159实现,两条语句绑定执行即可拿到id:

INSERT INTO `table` (full_name) 
VALUES ('John')
ON DUPLICATE KEY UPDATE id = LAST_INSERT_ID(id);
SELECT 2582159;

大多数编程语言的数据库驱动都支持一次性执行上述两条语句,效果和单条逻辑一致。

内容的提问来源于stack exchange,提问作者user14352137

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.04 07:06:01