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を使用して、単一のステートメント内でチェックを実行することを検討することをお勧めします。つまり、SQLEXISTS条件を使用します。WHERE EXISTSまたはWHERE NOT EXISTS

于 2011-06-06T13:52:49.920 に答える
2

おそらく、使用しているデータベースには、これを自動的に解決する挿入または更新機能があります。DB2では、たとえばMERGEINTOを使用できます。こちらをご覧ください

于 2011-06-06T13:53:11.007 に答える
1

これがおそらく、人気のあるORMソリューション(Hibernate、Toplink、iBatis)の1つに切り替える理由です。これらのツールは、さまざまなSQL方言を「認識」し、クエリを適切に最適化します。

于 2011-06-06T14:12:15.253 に答える