MySQL:如果存在,获取ID,否则插入并返回ID

MySQL:如果存在,获取ID,否则插入并返回ID,mysql,select,if-statement,insert,Mysql,Select,If Statement,Insert,我正在尝试构造一个查询,该查询将返回指定名称记录的ID,或者如果它不存在,则插入名称并返回ID。(ID是一个自动递增字段,名称将不会有重复项,而是一个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

我正在尝试构造一个查询,该查询将返回指定名称记录的ID,或者如果它不存在,则插入名称并返回ID。(ID是一个自动递增字段,名称将不会有重复项,而是一个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…但我不确定从哪里开始)

示例名称表:

+----+----------+
| ID | NAME     |
+----+----------+
| 1  | ANDY     |
| 2  | BOB      |
| 3  | CARL     |
+----+----------+

我是否应该将其拆分为多个查询?

拆分您试图完成的任务:

  • 首先检查是否存在具有特定名称的行

  • 如果是,则选择整行并检索id,如果否,则将数据插入数据库


  • 插入操作后,可以使用SELECT LAST_INSERT_ID()获取新插入行的ID

    执行插入忽略,然后执行选择。虽然我想知道是否有办法跳过select。因为我不能使用unique(因为insert varchar>1000不能使用unique),那么insert ignore将只添加重复项。您可以将其拆分为两个查询。一个用于在记录不存在时插入,另一个用于实际获取id。在单个查询中似乎无法做到这一点,因此我将拆分它