【问题标题】:SQL to get, inserting new entry if absent要获取的 SQL,如果不存在则插入新条目
【发布时间】:2012-07-17 21:45:49
【问题描述】:

我不确定这个问题是否适用于 SQL、MySQL、存储例程甚至 JDBC 领域。基本上我想要一个看起来像这样的 SQL 函数:

INSERT IGNORE (id, data) INTO table
SELECT id FROM table WHERE `data` = data

这需要通过原始 SQL 或存储例程从 Java 启动。这看起来非常糟糕,因为如果insert ignore 成功,它不应该立即执行 SQL 查询来获取它刚刚插入的内容。请注意,id 将自动生成。做到这一点的最佳方法是对 SQL 查询的数量和可读性等有效吗?我真的不知道 INSERT IGNORE 的效率有多高。

【问题讨论】:

    标签: java mysql sql stored-procedures


    【解决方案1】:

    你可以使用LAST_INSERT_ID(),有点逻辑:

    INSERT IGNORE ... INTO Table
    SELECT IF(LAST_INSERT_ID() <> 0, LAST_INSERT_ID(), (SELECT id FROM table WHERE `data` = data))
    

    (未经测试)

    【讨论】:

      猜你喜欢
      • 2018-09-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-02-05
      • 1970-01-01
      • 2014-10-23
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多