SQLでINSERT ON DUPLICATE KEY UPDATE文を効果的に使う方法

この記事では、SQLの`INSERT ON DUPLICATE KEY UPDATE`文について詳しく解説します。このSQL文は、特定のキーがすでに存在する場合にはレコードをアップデートし、存在しない場合には新しいレコードを挿入するという便利な機能を提供しています。具体的な使用例とともに、その構文と動作を分かりやすく説明します。

目次

INSERT ON DUPLICATE KEY UPDATE文とは?

`INSERT ON DUPLICATE KEY UPDATE`は、MySQLをはじめとするいくつかのデータベースで利用できるSQL文です。この命令は、特定のキーで一意制約があるテーブルにデータを挿入または更新する際に非常に役立ちます。

基本構文

基本的な構文は以下の通りです。

INSERT INTO table_name (column1, column2, ...)
VALUES (value1, value2, ...)
ON DUPLICATE KEY UPDATE 
column1 = VALUES(column1), column2 = VALUES(column2);

使用例

シナリオ説明

例として、学生の成績を管理するテーブル`students`を考えます。このテーブルには、学生IDが一意のキーとなっています。

学生ID名前科目成績
1山田数学80
2佐藤英語70
テーブル名称1: 初期状態の`students`テーブル

新規データの挿入

新規のデータ(学生ID:3, 名前:鈴木, 科目:数学, 成績:85)を挿入します。

INSERT INTO students (学生ID, 名前, 科目, 成績)
VALUES (3, '鈴木', '数学', 85)
ON DUPLICATE KEY UPDATE 
学生ID = VALUES(学生ID), 名前 = VALUES(名前), 科目 = VALUES(科目), 成績 = VALUES(成績);
学生ID名前科目成績
1山田数学80
2佐藤英語70
3鈴木数学85
テーブル名称2: 新規データ挿入後の`students`テーブル

既存データの更新

次に、既存のデータ(学生ID:1)の成績を更新します。

INSERT INTO students (学生ID, 名前, 科目, 成績)
VALUES (1, '山田', '数学', 90)
ON DUPLICATE KEY UPDATE 
学生ID = VALUES(学生ID), 名前 = VALUES(名前), 科目 = VALUES(科目), 成績 = VALUES(成績);
学生ID名前科目成績
1山田数学90
2佐藤英語70
3鈴木数学85
テーブル名称3: 既存データ更新後の`students`テーブル

まとめ

INSERT ON DUPLICATE KEY UPDATE文は、新規データの挿入と既存データの更新を一つのSQL文で行うことができ、非常に便利です。特に一意制約が設定されているテーブルでのデータ管理に威力を発揮します。

コメント

コメントする

目次