MySQL:如果存在则获取 ID,否则插入并返回 ID
Posted
技术标签:
【中文标题】MySQL:如果存在则获取 ID,否则插入并返回 ID【英文标题】:MySQL: Get ID if exists, else insert and return ID 【发布时间】:2014-04-28 06:11:46 【问题描述】:我正在尝试构建一个查询,该查询将返回指定 NAME 记录的 ID,或者如果它不存在,则插入名称并返回 ID。 (ID 是一个自增字段,NAME 不会有重复,而是一个 varchar 1024,所以它不能有唯一属性)
我的 SQL 查询应该是这样的:
IF EXISTS(SELECT 1 FROM NAMES WHERE NAME='DAVE')
THEN
SELECT FROM NAMES WHERE NAME='DAVE'
ELSE
INSERT INTO NAMES(`NAME`) VALUES ('DAVE')
ENDIF;
(显然这不是有效的 SQL……但我不确定从哪里开始)
NAMES 表示例:
+----+----------+
| ID | NAME |
+----+----------+
| 1 | ANDY |
| 2 | BOB |
| 3 | CARL |
+----+----------+
我应该把它分成多个查询吗?
【问题讨论】:
执行插入忽略,然后执行选择。虽然我想知道是否有办法跳过选择。 因为我不能使用唯一(因为 varchar > 1000 不能使用唯一),那么插入忽略只会添加重复项 您可以将其拆分为两个查询。一个用于在记录不存在时插入,另一个用于实际获取 id。 【参考方案1】:拆分你想要完成的任务:
首先检查是否存在具有特定名称的行
如果是,则选择整行并检索 id,如果不是,则将数据插入 db。
您可以在插入操作后使用 SELECT LAST_INSERT_ID() 来获取新插入行的 id。
【讨论】:
看起来没有办法在单个查询中执行此操作,所以我将其拆分以上是关于MySQL:如果存在则获取 ID,否则插入并返回 ID的主要内容,如果未能解决你的问题,请参考以下文章