10

如果记录不存在,我需要将记录插入到表中,如果记录存在于表中,我需要更新记录。当然,我可以写:p-code:

SELECT * FROM table1 WHERE id='abc' by JDBC
if(exists)
   UPDATE table1 SET ... WHERE id='abc' by JDBC;
else
   INSERT INTO table1... by JDBC;

但是,我认为代码并不优雅。或者,我也可以这样写:p-code:

int row = Statement.executeUpdate("INSERT INTO table1...", 2);
if(row==0)
  update table1 SET ... WHERE id='abc' by JDBC;

您认为后一种方式更好更快吗?谢谢!

编辑:在 MYSQL

4

4 回答 4

11

这取决于您使用的数据库类型以及您是否可以利用数据库的特定功能。例如,MySQL 允许您执行以下操作:

INSERT INTO territories (code, territory) VALUES ('NO', 'Norway')
ON DUPLICATE KEY UPDATE territory = 'Norway'

但是,上述内容不符合标准 (SQL-92)。也就是说,它很可能不适用于所有数据库。换句话说,您必须坚持使用您编写的代码。它可能看起来不那么优雅,但它可能是最安全的解决方案。

于 2011-06-06T13:55:17.783 回答
4

您可能希望查看使用 DBMS 在单个语句中进行检查,即使用 SQL EXISTS 条件:WHERE EXISTSWHERE NOT EXISTS

于 2011-06-06T13:52:49.920 回答
2

也许您正在使用的数据库具有插入或更新功能,可以自动为您解决这个问题。例如,在 DB2 中,您可以使用 MERGE INTO。看这里

于 2011-06-06T13:53:11.007 回答
1

这可能是切换到流行的 ORM 解决方案之一(Hibernate、Toplink、iBatis)的原因。这些工具“了解”各种 SQL 方言并相应地优化您的查询。

于 2011-06-06T14:12:15.253 回答