ホームページ >データベース >mysql チュートリアル >SQLite は事前の SELECT ステートメントなしで UPSERT 操作を実行できますか?
質問:
Wikipedia の UPSERT の定義によれば、INSERT 操作と UPDATE 操作を組み合わせたものです。目標は、レコードが存在するかどうかに基づいて、既存のレコードを更新するか、新しいレコードを挿入する単一の操作を実装することです。
質問:
更新または挿入が必要かどうかを判断するために最初に SELECT を実行せずに、SQLite で UPSERT を実行することは可能ですか?
答え:
SQLite での UPSERT サポート
SQLite バージョン 3.24.0 では、ON CONFLICT 句を使用した UPSERT のサポートが導入されました。
文法:
<code class="language-sql">INSERT OR REPLACE INTO 表名 (列1, 列2, ...) VALUES (值1, 值2, ...) ON CONFLICT (约束名) DO UPDATE SET 列1 = 值1, 列2 = 值2, ...</code>
例:
列 ID、名前、役割を持つテーブルを考えてみましょう。 ID が存在する場合は名前とロールを更新し、存在しない場合はロールのデフォルト値を持つレコードを挿入する UPSERT ステートメントを作成しましょう。
<code class="language-sql">INSERT OR REPLACE INTO Employee (id, name, role) VALUES (1, 'John Doe', 'CEO') ON CONFLICT (id) DO UPDATE SET name = 'John Doe', role = 'CEO';</code>
代替:
SQLite が UPSERT をサポートする前は、同様の機能を実現する面倒な方法がいくつかありました。
SELECT との比較:
UPSERT は、挿入操作または更新操作を 1 つのクエリで実行するため、通常、最初の SELECT よりも効率的です。ただし、テーブルが非常に大きい場合は、場合によっては SELECT の方が高速な場合があります。
以上がSQLite は事前の SELECT ステートメントなしで UPSERT 操作を実行できますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。