概要 :このチュートリアルでは、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の使用方法を説明しました。 テーブルの行を挿入または置換するステートメント。