概要 :このチュートリアルでは、SQLite REPLACE
の使用方法を学習します テーブルの既存の行を挿入または置換するステートメント。
SQLite REPLACE
の紹介 ステートメント
REPLACE
のアイデア ステートメントは、UNIQUE
またはPRIMARY KEY
制約違反が発生すると、次のようになります。
- まず、制約違反の原因となっている既存の行を削除します。
- 次に、新しい行を挿入します。
2番目のステップで、制約違反がある場合(NOT NULL
など) 制約が発生すると、REPLACE
ステートメントはアクションを中止し、トランザクションをロールバックします。
次に、REPLACE
の構文を示します。 ステートメント。
INSERT OR REPLACE INTO table(column_list)
VALUES(value_list);
Code language: SQL (Structured Query Language) (sql)
または短い形式で:
REPLACE INTO table(column_list)
VALUES(value_list);
Code language: SQL (Structured Query Language) (sql)
SQLite REPLACE
の使用例をいくつか見てみましょう。 それがどのように機能するかを理解するための声明。
SQLite REPLACE
ステートメントの例
まず、positions
という名前の新しいテーブルを作成します 次の構造で。
CREATE TABLE IF NOT EXISTS positions (
id INTEGER PRIMARY KEY,
title TEXT NOT NULL,
min_salary NUMERIC
);
Code language: SQL (Structured Query Language) (sql)
試してみてください
次に、いくつかの行をpositions
に挿入します テーブル。
INSERT INTO positions (title, min_salary)
VALUES ('DBA', 120000),
('Developer', 100000),
('Architect', 150000);
Code language: SQL (Structured Query Language) (sql)
試してみてください
3番目に、次のSELECT
を使用して挿入を確認します ステートメント。
SELECT * FROM positions;
Code language: SQL (Structured Query Language) (sql)
試してみてください
次のステートメントは、title
に一意のインデックスを作成します positions
の列 重複する役職名がないことを確認するための表:
CREATE UNIQUE INDEX idx_positions_title
ON positions (title);
Code language: SQL (Structured Query Language) (sql)
試してみてください
positions
に位置を追加するとします。 テーブルが存在しない場合は、位置が存在する場合は、現在のテーブルを更新します。
次のREPLACE
ステートメントは、新しい行をpositions
に挿入します ポジションタイトルFull Stack Developer
のためのテーブル positions
にありません テーブル。
REPLACE INTO positions (title, min_salary)
VALUES('Full Stack Developer', 140000);
Code language: SQL (Structured Query Language) (sql)
試してみてください
REPLACE
を確認できます SELECT
を使用した操作 ステートメント。
SELECT
id,title,min_salary
FROM
positions;
Code language: SQL (Structured Query Language) (sql)
試してみてください
次のステートメントを参照してください。
REPLACE INTO positions (title, min_salary)
VALUES('DBA', 170000);
Code language: SQL (Structured Query Language) (sql)
試してみてください
まず、SQLiteはUNIQUE
をチェックしました 制約。
次に、このステートメントがUNIQUE
に違反しているため DBA
を追加しようとすることによる制約 すでに存在するタイトル、SQLiteは既存の行を削除しました。
第三に、SQLiteはREPLACE
によって提供されたデータで新しい行を挿入しました ステートメント。
REPLACE
に注意してください ステートメントはINSERT
を意味します またはREPLACE
、INSERT
ではありません またはUPDATE
。
次のステートメントを参照してください。
REPLACE INTO positions (id, min_salary)
VALUES(2, 110000);
Code language: SQL (Structured Query Language) (sql)
試してみてください
ステートメントが実行しようとしたのは、min_salary
を更新することです。 開発者であるID2のポジションの場合。
まず、ID2の位置がすでに存在します。REPLACE
ステートメントはそれを削除します。
次に、SQLiteは2つの列を持つ新しい行を挿入しようとしました:(id
、min_salary
)。ただし、NOT NULL
に違反しています タイトル列の制約。したがって、SQLiteはトランザクションをロールバックします。
title
の場合 列にNOT NULL
がありません 制約、REPLACE
ステートメントは、タイトル列がNULL
である新しい行を挿入します 。
このチュートリアルでは、SQLiteのREPLACE
の使用方法を説明しました。 テーブルの行を挿入または置換するステートメント。