2011-07-01 12 views
0

データベーステーブル構造内で列が一意になる場合、挿入する新しい値がスクリプトを介してテーブルに既に存在するかどうかをチェックする必要はありますか?それとも、DBMSに新しい値ではない値を挿入するだけでいいですか?ユニークな列を適用する

答えて

1

データベースに挿入する前に、データの検証を行う必要があります。つまり、独自の定義された列に一意でない値を挿入しようとすると、SQLexceptionが発生します。クエリが何を返す場合

挿入する前にこれを検証するために、あなたは、例えば、単にそれは、SQLExceptionをスローしますように挿入しようとしない、

select 1 
from mytable_with_unique_column 
where my_unique_column = myNewValue 

を行うことができます。

+0

ああありがとう、これは私がやっていることです、これは私が何をすべきだと思うかを確認します。 –

+0

私にとっては、あなたは不必要な作業をしているようです。このチェックでは、選択クエリと挿入クエリの間に同じ値が挿入されていないことを確認することはできません。あなたの値が一意であるかどうかを判断するためにSQLExceptionを処理してください。 –

2

重複する値を一意の列に挿入しようとすると、挿入クエリが失敗します。したがって、挿入クエリがうまくいっているかどうかを確認することをお勧めします。あなたの挿入クエリが通過したかどうかは、状況に関係なく常に確認する必要があります:)

1

ユニーク制約の検証は間違いなく過剰です。

列に一意制約を設定すると、この列に対して暗黙的な索引が作成されます。したがって、DBMSはあなたのデータをはるかに迅速に検証できます。残念ながら、列に重複値を挿入しようとすると、対処しなければならない制約違反例外が発生します(ただし、スクリプト検証を使用している間にそのようなエラーに対処する必要があります)。

幸運。

1

INSERT文と検証は1つの文に選択し組み合わせることができます。すでに与えられた一意の値を持つ行が存在しない場合

insert into mytable_with_unique_column (...) values (...) 
where not exists 
(
    select 1 
    from mytable_with_unique_column 
    where my_unique_column = myNewValue 
) 

はこれが唯一の新しい行を挿入します。

関連する問題