0

我试图在我的表中插入一行,前提是它不存在(基于唯一的 id (myId))。我不想在插入之前查询每一行,因为这需要一些时间。我想尝试插入,如果失败也没关系。有没有办法做到这一点?

目前,我正在做:

    try {
        sqlObj.executeInsert(query)
    }
    catch (Exception e) {
        println "Sql Exception"
    }

但这有点慢,因为在某些情况下,几乎每一行都会引发异常。有没有办法在 SQL/Groovy/Postgresql 中处理这个问题?

4

1 回答 1

1

SQL 中的合并语句允许您指定行存在或不存在时的替代逻辑。你可以这样写:

MERGE INTO tablename USING table_reference ON (condition)
   WHEN NOT MATCHED THEN
   INSERT (column1 [, column2 ...]) VALUES (value1 [, value2 ...

(这是删除“匹配时”部分的维基百科示例。

您选择检查密钥是否存在需要很长时间,这有点令人不安。您是否使用 select * 语句而不是循环遍历 Java 中的所有行?另外, id 字段上是否有索引?如果没有索引,则合并语句将在性能方面遇到与您现在相同的问题。

于 2013-10-09T01:07:15.970 回答