避免插入失败以避免虚假的自动增量

And*_*man 4 mysql sql innodb auto-increment

我的问题与为什么MySQL自动增量在失败的插入上增加一样?,但id我不想增加我的字段,我宁愿只重写INSERT导致我麻烦的查询.假设我有一个包含两个字段的数据库,id并且username,哪里id是主键并且username是唯一键.我基本上是在寻找能够做到的语法INSERT...IF NOT EXISTS.现在,我做到了

INSERT INTO `table`(`username`) 
    VALUES ('foo') 
    ON DUPLICATE KEY UPDATE `id`=`id`
Run Code Online (Sandbox Code Playgroud)

我只有一个线程写入数据库,所以我不需要任何类型的并发保护.建议?

ype*_*eᵀᴹ 5

你应该用这个:

INSERT INTO tableX (username) 
  SELECT 'foo' AS username
  FROM dual
  WHERE NOT EXISTS
        ( SELECT *
          FROM tableX 
          WHERE username = 'foo'
        ) ;
Run Code Online (Sandbox Code Playgroud)

如果要包含更多列的值:

INSERT INTO tableX (username, dateColumn) 
  SELECT 'foo'                       --- the aliases are not needed             
       , NOW()                       --- actually
  FROM dual
  WHERE NOT EXISTS
        ( SELECT *
          FROM tableX 
          WHERE username = 'foo'
        ) ;                      
Run Code Online (Sandbox Code Playgroud)