2017-07-05 12 views
0

私のアプリケーションにSQLiteデータベースを使用しています。私は4列 - Student_Name、Student_Enroll、Student_Mob、Student_Addressをデータベースに持っています。今度は、4つの列の値のいずれかが異なるか、すべての値が異なる場合にのみ、新しいレコードを追加できます。すべての列の値が同じ場合、新しいレコードは生成されません。 この問題を解決するために私を導くことができますか?SQLIteカラム値の変更にユニークなデータを挿入する方法

答えて

0

列のセットは一意でなければならないことを強制するには、UNIQUE制約を追加します。これは、新しい行を可能に

create table Students (
/* ID    INTEGER PRIMARY KEY, */ 
    Student_Name TEXT, 
    Student_Enroll TEXT, 
    Student_Mob  TEXT, 
    Student_Address TEXT, 
    UNIQUE (Student_Name, Student_Enroll, Student_Mob, Student_Address) 
); 

を4つの列の少なくとも1つが異なる値を持つ場合に限ります。

プレーンなINSERTでは、重複する行を挿入しようとするとエラーになります。あなたは、単に代わりにそれを無視したい場合は、INSERTを使用するか、または無視:私はすべての私の列にUNIQUE設定

​​
0

データベース作成時に、一意のレコードのみを挿入する列ごとにUNIQUE ...を挿入します。

+0

。今度は4列目のみを変更し、残りの列は同じままです。新しいレコードが挿入されるかどうか教えてください。私の要求に従って、新しいレコードを挿入する必要があります。 – Philliphe

+0

ユニークは新鮮なレコードのみを保存するのに役立ちます。同じデータが見つかった場合は無視されます – user8119020

0

解決策1:(シンプル)

uniqueとしてすべての列を定義します。

create table TableName (id integer primary key autoincrement, 
Student_Name text not null unique, 
Student_Enroll text not null unique, 
Student_Mob text not null unique); 

あなたは

ソリューション2に必要がある場合は、同様Student_Addressを追加することができます。(ビット複合体)

ANDオペレータ

INSERT INTO TableName (Student_Name, Student_Enroll, Student_Mob) 
SELECT varStudentName, varStudentEnroll, varStudentMob 
WHERE NOT EXISTS(SELECT 1 FROM TableName WHERE Student_Name = varStudentName OR Student_Enroll = varStudentEnroll OR Student_Mob = varStudentMob); 

//If a record already contains a row, then the insert operation will be ignored. 

WHEREであなたはthe sqlite manualでより多くの情報を見つけることができます。

ライブ例:

  1. オープンSQLite Online
  2. ペースト次のコード

    INSERT INTO demo (id,name,hint) 
    SELECT 4, 'jQuery', 'is a cross-platform JavaScript library designed to simplify the client-side scripting of HTML' 
    WHERE NOT EXISTS(SELECT 1 FROM demo WHERE name = 'jQuery' OR hint = 'is a cross-platform JavaScript library designed to simplify the client-side scripting of HTML'); 
    
    SELECT * from demo 
    
  3. ヒットRUN

これは4番目のレコードを挿入しないで、WHERE節の両方の値を変更するとレコードが挿入されます。

+0

2番目のデータは有効なSQLではありません。 –

+0

問題を修正するか、少なくとも強調表示して修正してください。 –

+0

VALUESの後ろにWHERE句を置くことはできません([manual](http://www.sqlite.org/lang_insert.html参照))。 –

1

列をUNIQUEに設定しているにもかかわらず、新しいデータを挿入しようとすると、各列に作成された競合を解決する必要があります。

、そう紛争を解決するための動作を定義するには:

"CREATE TABLE table (your columns here...(UNIQUE unique colums here...) ON CONFLICT REPLACE);" 
+0

正解+1 –

関連する問題