【问题标题】:MySQL INSERT only if row doesn't exist, otherwise select the duplicate rowMySQL INSERT 仅当行不存在时,否则选择重复行
【发布时间】:2011-03-05 23:13:54
【问题描述】:

我正在寻找一个语句,它会尝试在表中插入一行,但如果遇到重复行,则返回该行的主键。表中的一个字段是自增主键,另一个是唯一的。

【问题讨论】:

标签: mysql insert primary-key unique-key


【解决方案1】:

这应该可以在 DB2 中使用,不知道它是否可以在 MySQL 中使用,或者是否有特殊的 MySQL 语法:

SELECT pk, 'inserted' FROM FINAL TABLE (
  INSERT INTO table (Col1)
  SELECT Val1
  FROM table
  WHERE col1 != Val1
  FETCH FIRST ROW ONLY
)
UNION 
SELECT pk, 'existing'
FROM table
WHERE col1 = val1

这里的想法是当那里没有唯一值时从表中选择一行,插入新值并从表中返回生成的主键。然后,如果唯一值已在表中,则将其与返回相应键的 select 组合。只有其中一个语句应该返回一行,第二列指示主键是新的还是现有的。

【讨论】:

    【解决方案2】:

    至少在理论上,这应该对你有用:

    首先扩展您的表以添加一个 tinyint 类型的附加列。然后您可以在插入/更新时使用以下查询:

    INSERT INTO yourtable (a, b) VALUES (1, 2) ON DUPLICATE KEY UPDATE id  = LAST_INSERT_ID(id), dummy = NOT dummy
    

    (我在这里假设列 a 具有唯一索引,并且存在 a=1 的行。)

    然后您可以通过

    获取新行的 ID(在 INSERT 的情况下)或现有行(在 UPDATE 的情况下)
    SELECT LAST_INSERT_ID()
    

    【讨论】:

      猜你喜欢
      • 2013-03-10
      • 2021-10-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-04-28
      • 1970-01-01
      • 2014-07-31
      • 1970-01-01
      相关资源
      最近更新 更多