3

我不确定这个问题是否适合 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 的效率有多高。

4

1 回答 1

0

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

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

(未经测试)

于 2012-07-18T19:09:21.507 回答