sql >> データベース >  >> RDS >> SQLite

SQLiteREPLACEステートメント

    概要 :このチュートリアルでは、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を意味します またはREPLACEINSERTではありません またはUPDATE

    次のステートメントを参照してください。

    REPLACE INTO positions (id, min_salary)
    VALUES(2, 110000);Code language: SQL (Structured Query Language) (sql)

    試してみてください

    ステートメントが実行しようとしたのは、min_salaryを更新することです。 開発者であるID2のポジションの場合。

    まず、ID2の位置がすでに存在します。REPLACE ステートメントはそれを削除します。

    次に、SQLiteは2つの列を持つ新しい行を挿入しようとしました:(idmin_salary )。ただし、NOT NULLに違反しています タイトル列の制約。したがって、SQLiteはトランザクションをロールバックします。

    titleの場合 列にNOT NULLがありません 制約、REPLACE ステートメントは、タイトル列がNULLである新しい行を挿入します 。

    このチュートリアルでは、SQLiteのREPLACEの使用方法を説明しました。 テーブルの行を挿入または置換するステートメント。


    1. LinuxでデフォルトのMySQL/MariaDBポートを変更する方法

    2. SQL Server(T-SQL)でパーティションを2つに分割する

    3. SQLiteでコンマを使用して数値をフォーマットする

    4. SQLとは何ですか?