MySQL
 Computer >> コンピューター >  >> プログラミング >> MySQL

【MySQL】レコードの存在確認と重複時の列の上書き更新を行う方法(INSERT ... ON DUPLICATE KEY UPDATE)

MySQLで「レコードが存在しない場合は挿入し、すでに存在する場合は指定した列の値を上書きしたい」というケースがあります。このような場合には、INSERT ... ON DUPLICATE KEY UPDATE 構文を使用します。この記事では、具体的なサンプルコードとともにその使い方を解説します。

サンプルテーブルの作成

まず、FirstName 列に UNIQUE キーを設定したテーブルを作成します。UNIQUE キーがあることで、重複データの挿入が検出されるようになります。

mysql> create table DemoTable1891
    (
    FirstName varchar(20),
    UNIQUE KEY(FirstName)
    );
Query OK, 0 rows affected (0.00 sec)

INSERT ... ON DUPLICATE KEY UPDATE でレコードを挿入

次に、INSERT 文に ON DUPLICATE KEY UPDATE を組み合わせてレコードを挿入します。重複が発生した場合は、UPDATE 句で指定した内容に上書きされます。

mysql> insert into DemoTable1891 values('Chris') on duplicate key update FirstName='Robert';
Query OK, 1 row affected (0.00 sec)
mysql> insert into DemoTable1891 values('David') on duplicate key update FirstName='Robert';
Query OK, 1 row affected (0.00 sec)
mysql> insert into DemoTable1891 values('Chris') on duplicate key update FirstName='Robert';
Query OK, 2 rows affected (0.00 sec)

実行結果の確認

SELECT 文ですべてのレコードを表示してみましょう。

mysql> select * from DemoTable1891;

実行結果は以下のようになります。

+-----------+
| FirstName |
+-----------+
| David     |
| Robert    |
+-----------+
2 rows in set (0.00 sec)

動作のポイント

  • 1回目・2回目の INSERT では、「Chris」「David」はまだ存在しないため、通常どおり新規挿入されます(1 row affected)。
  • 3回目の INSERT では、UNIQUE キーにより「Chris」の重複が検出され、ON DUPLICATE KEY UPDATE が機能して FirstName が「Robert」に上書き更新されます。
  • その結果、テーブルには「David」と「Robert」の2件のみが残ります。

このように INSERT ... ON DUPLICATE KEY UPDATE を使えば、存在チェックと更新処理を1つの SQL で簡潔に実現できます。アプリケーション側で SELECT してから INSERT/UPDATE を分岐させる必要がないため、処理の効率化にもつながります。

  1. 【MySQL】集計関数の結果と他のすべての列を同時に取得する方法

    MySQLでは、MAX()やSUM()などの集計関数を使う際、通常はGROUP BYが必要になります。しかし、「テーブルの全行をそのまま表示しながら、集計結果も一緒に取得したい」というケースもあります。本記事では、サブクエリ(スカラーサブクエリ)を活用して、すべての列と集計関数の結果を1つのクエリで同時に取得する方法を解説します。1. サンプルテーブルを作成するまず、以下のコマンドでテーブルを作成します。mysql> create table DemoTable1621 -> ( -> StudentId int NOT NULL AUTO_INCREMENT P

  2. MySQLのバージョンを確認する方法をわかりやすく解説

    この記事では、現在利用しているMySQLサーバーのバージョンを確認する方法について詳しく解説します。コンソールでクエリを実行する前に、まずクライアントがサーバーに正しく接続されていることを確認しておきましょう。接続が確立されていないと、クエリを実行しても結果を取得できません。MySQLのバージョンを確認する基本クエリ以下のクエリを実行すると、使用中のサーバーのバージョン番号と、実行時点の日付を同時に取得できます。mysql> SELECT VERSION(), CURRENT_DATE;ポイント: 関数「VERSION()」や「CURRENT_DATE」は大文字・小文字を区別しません。つ