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的主要内容,如果未能解决你的问题,请参考以下文章

如果存在则如何更新,否则在php mysql中插入[重复]

如果 id 存在则更新,否则插入 (ODBC)

MYSQL从另一个表更新数据,如果存在,否则插入[重复]

MySql IF 存在选择 ELSE 插入

如果需要,插入更新 pdo mysql 查询并获取最后插入的 id

mysql 表中数据不存在则插入,否则更新数据