SQLite INSERT、UPDATE、DELETE クエリと例
⚡ スマートサマリー
SQLite INSERT, UPDATE, and DELETE statements modify data in a database by adding new rows, changing existing values, and removing records, while the ON CONFLICT clause decides how constraint violations are resolved during those operations.

Insert, Update & Delete Query in SQLite
のデータ変更句 SQLite INSERT、UPDATE、および DELETE ステートメントです。新しい行の挿入、既存の値の更新、データベースからの行の削除に使用されます。
以下のすべての例では、sqlite3.exe を実行し、サンプル データベースへの接続を次のように開く必要があることに注意してください。
ステップ1) このステップでは、
- Open My Computer and navigate to the following directory “C:\sqlite” and
- Then open “sqlite3.exe“:
ステップ2) 以下のコマンドを使用して、「TutorialsSampleDB.db」データベースを開きます。
.open TutorialsSampleDB.db
これで、データベースに対してあらゆる種類のクエリを実行する準備が整いました。
SQLite INSERT
SQLite INSERT は、データベースの指定されたテーブルにレコードを挿入するために使用されます。 「INSERT」句を使用する必要があります。 INSERT 句の構文は次のとおりです。
- INSERT 句の後に、どのテーブルに値を挿入する必要があるかを指定する必要があります。
- テーブル名の後に、値を挿入する列のリストを記述します。
- 列名は無視して、書き込まなくても問題ありません。
- 列名を記述しない場合、値はテーブル内にあるすべての列に同じ順序で挿入され、列はテーブル内で定義されます。
- VALUES 句の後に、挿入する値をリストする必要があります。
- 各 INSERT 句は XNUMX 行のみを挿入します。 複数の行を挿入する場合は、行ごとに XNUMX つずつ、複数の INSERT 句を記述する必要があります。
SQLite 挿入例
次の例では、学生テーブルに学生ごとに 2 行ずつ、合計 XNUMX 行を挿入します。
INSERT INTO Students(StudentId, StudentName, DepartmentId, DateOfBirth) VALUES(11, 'Ahmad', 4, '1997-10-12'); INSERT INTO Students VALUES(12, 'Aly', 4, '1996-10-12');
これは正常に実行されるはずですが、出力はありません。
これにより XNUMX 人の学生が挿入されます。
- StudentId=11、StudentName=Ahmad、DepartmentId=4、DateOfBirth=1997-10-12 の最初の学生。
- The second student with StudentId=12, StudentName = Aly, DepartmentId = 4, and DateOfBirth = 1996-10-12’.
In the first statement, we listed the columns names “StudentId, StudentName, DepartmentId, DateOfBirth“.However, in the second statement, we didn’t.
The four values “12, ‘Aly’, 4, ‘1996-10-12’” will be inserted in all the four columns of the Students table in the same order the columns are defined.
さて、次のコードを実行して、2人の学生がStudentsテーブルに挿入されたことを確認しましょう。 クエリー:
SELECT * FROM Students;
すると、そのクエリから返された 2 人の学生が次のように表示されます。
SQLite 更新
SQLite UPDATE クエリは、テーブル内の既存のレコードを変更するために使用されます。UPDATE クエリで WHERE 句を使用して、選択した行を更新できます。UPDATE 句は、特定の列の値を変更してテーブルを更新します。UPDATE 句の構文は次のとおりです。
以下の通りです:
- 「update句」の後には更新するテーブル名を記述します。
- 更新する列名と更新する値を記述する「SET句」を記述します。
- 複数の列を更新できます。 各行の間にカンマを使用できます。
- WHERE 句を指定して、一部の行のみを指定できます。 式が true と評価した行のみが更新されます。 WHERE 句を指定しなかった場合は、すべての行が更新されます。
SQLite 更新例
次の UPDATE ステートメントでは、StudentId = 6 の学生の DepartmentId を 3 に更新します。
UPDATE Students SET DepartmentId = 3 WHERE StudentId = 6;
これは正常に実行され、何も出力されないはずです。
UPDATE 句では、Students テーブルを更新することを指定しました。
- WHERE 句では、すべての学生をフィルタリングして StudentId = 6 の行のみを選択しました。
- SET 句は、選択した学生の学科 ID の値を 3 に更新します。
ここで、次のコマンドを実行して、ID 6 の学生が更新されたことを確認しましょう。
SELECT * FROM Students WHERE StudentId = 6;
次のように、Department Id の値が 3 になっていることがわかります。
SQLite 削除
SQLite DELETE クエリは、指定されたテーブルから既存のレコードを削除するために使用されます。 DELETE クエリで WHERE 句を使用すると、選択した行を削除できます。
DELETE 句の構文は次のとおりです。
- You have to write a table name after the DELETE FROM clause, from which you want to delete records. (Note: that the DELETE clause is used to delete some records from a table or delete all the records and it won’t delete the table itself. However, the DROP clause is used to delete the entire table with all the records on it.)
- この「DELETE FROM guru」のように DELETE 句を書くと、テーブル「guru」からすべてのレコードが削除されます。
- 特定の行を削除する場合は、式で WHERE 条件を指定できます。 式が true と評価された行のみが削除されます。 たとえば、「DELETE FROM guru WHERE id > 5」 – これにより、ID が 5 より大きいレコードのみが削除されます。
例:
次のステートメントでは、StudentId 11 と 12 の XNUMX 人の学生を削除します。
DELETE FROM Students WHERE StudentId = 11 OR StudentId = 12;
The expression “StudentId = 11 OR StudentId = 12” will be true for only students with Ids 11 and 12. So the DELETE clause will be applied on both and will delete them only.
このコマンドは正常に実行され、次のような出力は表示されません。
次のように Students テーブルからすべてのレコードを選択すると、2 人の学生が削除されたことを確認できます。
SELECT * FROM Students;
次のように、ID 11 と 12 を持つ XNUMX 人の学生は表示されないはずです。
SQLite 紛争条項
UNIQUE、NOT NULL、CHECK、または PRIMARY KEY のいずれかの列制約を持つ列があるとします。そして、この制約と競合する値を使用して、その列に値を挿入または更新しようとしました。
たとえば、列に UNIQUE 制約があり、UNIQUE 制約と競合するすでに存在する値 (重複値) を挿入しようとした場合です。 次に、CONFLICT 句を使用すると、このような場合にこの競合を解決するために何を行うかを選択できます。
CONFLICT 句が競合を解決する方法を説明する前に。 データベース トランザクションとは何かを理解する必要があります。
データベーストランザクション
データベース トランザクションという用語は、次のリストです。 SQLite 操作 (挿入、更新、削除)。データベース トランザクションは 1 つの単位として実行される必要があり、すべての操作が正常に実行されるか、まったく実行されないかのいずれかになります。いずれかの操作の実行に失敗した場合、すべての操作がキャンセルされます。
データベーストランザクションの例
ある銀行口座から別の銀行口座に送金する取引には、いくつかのアクティビティが含まれます。この取引操作には、最初の口座からの資金の引き出しと、別の口座への入金が含まれます。この取引は完全に完了するか、完全にキャンセルする必要があり、途中で失敗してはなりません。
CONFLICT 句で選択できる XNUMX つの解決策のリストは次のとおりです。
- ROLLBACK – this will roll back the transaction in which the current SQLite 競合するステートメント (トランザクション全体がキャンセルされます)。たとえば、10 行を更新しようとしていて、10 行目に制約と競合する値がある場合、どの行も更新されず、XNUMX 行は同じままになります。エラーがスローされます。
- ABORT – this will abort (cancel) the current SQLite 競合するステートメントのみを削除すると、トランザクションはキャンセルされません。たとえば、10 行を更新しようとしていて、9 行目に制約と矛盾する値が含まれている場合、XNUMX 番目の値だけが更新されず、他の XNUMX 行は更新されます。エラーがスローされます。
- FAIL – aborts the current SQLite 矛盾のあるステートメント。ただし、トランザクションは続行されませんが、競合している行よりも前の行に加えられた変更はコミットされます。たとえば、10 行を更新しようとしていて、4 行目に制約と競合する値が含まれている場合、XNUMX 行のみが更新され、他の行は更新されません。エラーがスローされます。
- IGNORE – this will skip the row that contains the constraint violation and continue processing the other following rows of the SQLite 声明。たとえば、10 行を更新しようとしていて、4 行目に制約と競合する値が含まれている場合、XNUMX 行のみが更新され、他の行は更新されません。他の行の更新には続行せず、競合値を持つ行で停止します。エラーはスローされません。
- REPLACE – it depends on the type of constraint that has the violation:
- UNIQUE または PRIMARY KEY 制約の制約違反がある場合。 REPLACE は、違反の原因となった行を、新しく挿入または更新された行に置き換えます。
- NOT NULL 制約違反がある場合、REPLACE 句は NULL 値をその列のデフォルト値に置き換えます。列にデフォルト値がない場合は、 SQLite ステートメントは中止されます (ステートメントはキャンセルされます)
- CHECK 制約違反が発生した場合、句は中止されます。
Note: The above 5 resolutions are options for how do you want to resolve the conflict. It may not be necessarily what is applicable to resolve one conflict is applicable to resolve other types of conflicts.
CONFLICT句の宣言方法
CREATE TABLE 句内で列定義の制約を定義するときに、ON CONFLICT 句を宣言できます。次の構文を使用します。
前に説明したように、XNUMX つの解決策から XNUMX つを選択して競合を解決できます。
競合時無視の例
ステップ1) 次のように新しいテーブル サブジェクトを作成します。
CREATE TABLE [Subjects] ( [SubjectId] INTEGER NOT NULL PRIMARY KEY ON CONFLICT IGNORE, [SubjectName] NVARCHAR NOT NULL );
Notice that we have defined a PRIMARY KEY constraint on the SubjectId column. The primary key constraint won’t allow two duplicated values to be inserted into the SubjectId column so that all the values in that column should be unique. Also, notice that we choose a conflict resolution to be “IGNORE“.
コマンドは正常に実行され、エラーは発生しないはずです。
ステップ2) ここで、新しいテーブルのサブジェクトにいくつかの値を挿入してみましょう。ただし、その値は主キー制約に違反します。
INSERT INTO Subjects VALUES(1, 'Algebra'); INSERT INTO Subjects VALUES(2, 'Database Course'); INSERT INTO Subjects VALUES(2, 'Data Structures'); INSERT INTO Subjects VALUES(4, 'Algorithms');
これらの INSERT ステートメントでは、同じ主キー件名 ID 2 を持つ XNUMX つのコースを挿入しようとしましたが、これは主キー制約の違反です。
コマンドは正常に実行され、エラーは発生しないはずです。次のようになります。
ステップ3) 次のように、表からすべての主題を選択します。
SELECT * FROM Subjects;
これにより、件名のリストが表示されます。
Notice that only three subjects were inserted “Algebra, Database Course, and Algorithms” 4行の代わりに。
主キー制約に違反する値を持つ行、つまり「データ構造」は無視され、挿入されませんでした。 しかし、 SQLite その行の後に他のステートメントの実行を続けます。
ステップ4) テーブル subject を DELETE し、以下のコマンドを実行して、次の例のように別の ON CONFLICT 句でテーブル subject を再度作成します。
DROP TABLE Subjects;
Drop コマンドはテーブル全体を削除します。 Table Subjects は現在存在しません。
競合時の置換の例
ステップ1) 次のように新しいテーブル サブジェクトを作成します。
CREATE TABLE [Subjects] ( [SubjectId] INTEGER NOT NULL PRIMARY KEY ON CONFLICT REPLACE, [SubjectName] NVARCHAR NOT NULL );
SubjectId 列に PRIMARY KEY 制約を定義したことに注意してください。 主キー制約では、XNUMX つの重複した値を SubjectId 列に挿入することはできないため、その列内のすべての値は一意である必要があります。
Also, notice that we choose a conflict resolution option to be “REPLACE“. The command should run successfully and you shouldn’t get any errors:
ステップ2) ここで、新しいテーブル Subjects にいくつかの値を挿入してみましょう。ただし、その値は主キー制約に違反しています。
INSERT INTO Subjects VALUES(1, 'Algebra'); INSERT INTO Subjects VALUES(2, 'Database Course'); INSERT INTO Subjects VALUES(2, 'Data Structures'); INSERT INTO Subjects VALUES(4, 'Algorithms');
これらの INSERT ステートメントでは、同じ主キー件名 ID 2 を持つ XNUMX つのコースを挿入しようとしましたが、これは主キー制約の違反です。
コマンドは正常に実行され、エラーは発生しないはずです。次のようになります。
ステップ3) 次のように、表からすべての主題を選択します。
SELECT * FROM Subjects;
これにより、件名のリストが表示されます。
Notice that only three subjects were inserted “Algebra, Data Structures, and Algorithms” 一方、私たちは 4 行を挿入しようとしました。
The row that has the value that violates the primary key constraint, which is “Data Structures” replaced the value “Database Course” as following:
- 最初の 1 つの挿入ステートメントは問題なく正常に実行されます。 2 つの科目代数とデータベース コースが ID XNUMX、XNUMX で挿入されます。
- SQLite tries to run the third insert statement with SubjectId 2 and SubjectName “Data Structures“, it finds out that there is already a subject with SubjectId = 2. Which is a violation for the primary key constraint defined on the SubjectId column.
- SQLite will choose a REPLACE resolution for this conflict. It replaces the value that already exists in the subjects table with the new value from the insert statement. So, the “Database Course” SubjectName will be replaced with “Data Structures” SubjectName.


















