この記事では、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 |
新規データの挿入
新規のデータ(学生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 |
既存データの更新
次に、既存のデータ(学生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 |
まとめ
INSERT ON DUPLICATE KEY UPDATE文は、新規データの挿入と既存データの更新を一つのSQL文で行うことができ、非常に便利です。特に一意制約が設定されているテーブルでのデータ管理に威力を発揮します。
created by Rinker
¥4,554
(2024/11/21 10:54:58時点 Amazon調べ-詳細)
コメント