SQLite 新しいレコードを挿入するか、既に存在する場合は更新します

Bilal Shahid 2023年6月21日
  1. SQLite INSERT コマンド
  2. SQLite UPDATE コマンド
  3. SQLite INSERT 新しいレコード、または UPDATE (既に存在する場合)
SQLite 新しいレコードを挿入するか、既に存在する場合は更新します

この記事では、INSERTUPDATE、および INSERT OR UPDATE コマンドの使用方法について説明します。 ここでは、新しいレコードを INSERT する方法、またはレコードが既に存在する場合は UPDATE する方法についても説明します。

SQLite INSERT コマンド

SQLite では、テーブルにデータを挿入するのは非常に簡単です。 INSERT ステートメントを使用してタスクを完了できます。

SQLite では、INSERT ステートメントのさまざまな形式を使用して、複数行、単一行、およびデフォルト値をテーブルに挿入できます。 SELECT ステートメントを使用して、テーブルにデータの行を挿入できます。

データベース テーブルに単一の行を挿入するには、次の形式の INSERT ステートメントを使用できます。

INSERT  INTO  table (c1,c2, c3..) VALUES( val1, val2,val3..);

追加する前に、INSERT INTO ステートメントの後に、データを挿入する予定のテーブルの名前を指定する必要があります。

テーブルの列については、カンマ区切りのリストを追加する必要があります。 リストはオプションですが、書き留めておくことをお勧めします。

同じ列の順序で VALUE キーワードの後に値のコンマ リストを個別に追加します。 列リストを省略する場合は、値リストのすべての列に値を指定する必要があります。

リスト内の列と値の数は同じでなければならないことに注意してください。

同様の形式を使用して、複数の行をテーブルに挿入できます。 INSERT ステートメントを使用して、次の方法でこれを行うことができます。

INSERT  INTO table1 (c1,c2,c3..) VALUES (val1,val2,val3...), (val1,val2,val3...), ... (val1,val2,val3...), ;

VALUES 句の後に記述されたすべての値リストは、行としてテーブルに挿入されます。

前の例では、テーブルに 3つの行を追加します。 これが完了すると、SQLite は"Row Affected: 3"というメッセージを発行します。

これは、3つの行のデータが変更されたことを意味します。 select ステートメントを使用してテーブルの内容を表示し、意図した挿入がデータベースにあることを確認できます。

デフォルト値を指定してテーブルに入力することもできます。 これにより、以前に指定したデフォルト値を使用して、テーブルに新しい行が挿入されます。

デフォルト値がなく、NOT NULL制約が指定されていない場合、NULLが割り当てられます。

SQLite UPDATE コマンド

SQLite でデータを変更する必要がある場合は、UPDATE クエリを使用します。 選択した行を更新するには、UPDATE クエリで WHERE クエリを使用できます。 そうしないと、テーブルのすべての行が更新されます。

SQLite でデータを更新するための構文は次のとおりです。

UPDATE table_name
SET c1 = val1, c2 = val2...., cName = valName
WHERE [your condition];

複数の条件を満たす必要がある場合は、AND または OR 演算子を組み合わせることができます。 WHERE 句を使用してすべてのテーブル行を更新する必要はありません。

SQLite INSERT 新しいレコード、または UPDATE (既に存在する場合)

INSERT OR UPDATE コマンドは、本質的に INSERT コマンドの拡張です。 主な違いは、挿入される行が存在しない場合、INSERT OR UPDATEINSERT 操作を実行することです。

ただし、挿入された行がすでに存在する場合、INSERT OR UPDATEUPDATE 操作を実行します。 この操作は、特定の列の値で行を更新します。

この更新は、指定されたデータ値が既存のデータと同一である場合に発生します。 INSERT OR UPDATE は、INSERT ステートメントと同じ構文、機能、および制限を使用します。

一意の値を持つレコードを追加する必要がある場合、値 (たとえば、名前) が既に存在する場合はフィールドが変更されます。 これを行うには、次のコードを使用できます。

insert or replace into Employee (ID, Name, Type, Age, Salary) values
((select ID from Employee where Name = "SearchName"), "SearchName", ...);

テーブル行が既に存在する場合、insert リストに存在しないフィールドには NULL が割り当てられます。 したがって、ここでは ID 列に副選択を使用します。

置換の場合、このステートメントは値を NULL に設定し、新しい ID が割り当てられます。

置換ケースで行に特定のフィールド値をそのまま残し、挿入ケースでフィールド値を NULL に設定する場合は、同様のアプローチを使用できます。

前の例の Salary 列をそのままにしておきたいとしましょう。 これは、次の方法で実現できます。

insert or replace into Employee (ID, Name, Type, Age, Salary) values (
   (select ID from Employee where Name = "SearchName"),
   "SearchName",
    5,
    6,
    (select Salary from Book where Name = "SearchName"));

これに対する別のアプローチは、INSERT OR IGNORE の後に UPDATE を使用することです。

例: (ここでは、name が主キーです。)

INSERT OR IGNORE INTO Employee (name, age) VALUES ('Janet,' 23)
UPDATE Employee SET age = 23 WHERE name='Janet'

ここで、最初のコマンドはレコードを挿入します。 レコードが存在する場合、これは既存の主キーとの競合によって発生したエラーを無視します。

ここでの 2 番目のコマンドは、この場合、現在存在するレコードを更新します。

SQLite は、ユーザーが必要に応じてデータを挿入、変更、および抽出できるようにするいくつかのコマンドを採用しています。 INSERT および UPDATE コマンドは、ジョブを完了する上で非常に重要です。

これらのコマンドの使用には、さまざまな変更やアプローチが含まれます。 この記事では、これらのコマンドの構文と機能の概要を説明し、それらの使用方法を確実に理解できるようにしました。

著者: Bilal Shahid
Bilal Shahid avatar Bilal Shahid avatar

Hello, I am Bilal, a research enthusiast who tends to break and make code from scratch. I dwell deep into the latest issues faced by the developer community and provide answers and different solutions. Apart from that, I am just another normal developer with a laptop, a mug of coffee, some biscuits and a thick spectacle!

GitHub

関連記事 - SQLite Insert