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

MySQLのREPLACE INTOを使いこなす――DELETE+INSERTのようにレコードを置き換える方法

MySQLには、DELETE + INSERT と同等の動作を実現できる REPLACE INTO 文が用意されています。一意インデックスやPRIMARY KEYで重複が発生した場合、既存のレコードを削除してから新しいレコードを挿入してくれる便利な構文です。この記事では、実際にテーブルを作成しながらREPLACE INTOの動作を確認していきます。

1. サンプルテーブルを作成する

まずは動作確認用のテーブルを作成しましょう。

mysql> create table DemoTable
(
    Id int,
    FirstName varchar(50)
);
Query OK, 0 rows affected (0.60 sec)

2. 一意(ユニーク)インデックスを追加する

REPLACE INTOによる置き換え判定を行うために、Idカラムに一意インデックスを作成します。

mysql> alter table DemoTable add unique id_index(Id);
Query OK, 0 rows affected (0.41 sec)
Records: 0 Duplicates: 0 Warnings: 0

3. REPLACE INTOでレコードを挿入する

続いて、REPLACE INTOを使ってレコードを登録します。ここが重要なポイントです。3つ目のクエリでは、すでに存在するId「100」を指定していますが、実行結果が「2 rows affected」になっていますね。これは、既存の「Chris」のレコードが削除され、その後新しい「Bob」のレコードが挿入されたことを意味します。

mysql> replace into DemoTable values(100,'Chris');
Query OK, 1 row affected (0.10 sec)
mysql> replace into DemoTable values(101,'David');
Query OK, 1 row affected (0.13 sec)
mysql> replace into DemoTable values(100,'Bob');
Query OK, 2 rows affected (0.16 sec)
  • 重複がない場合: 通常のINSERTと同様に1行のみ追加されます(1 row affected)。
  • 重複がある場合: 既存レコードが削除され、新しいレコードが挿入されるため2行分の変更として扱われます(2 rows affected)。

4. 結果を確認する

SELECT文でテーブルの中身を表示して確認してみましょう。

mysql> select *from DemoTable;

実行結果は以下の通りです。

+------+-----------+
| Id   | FirstName |
+------+-----------+
| 100  | Bob       |
| 101  | David     |
+------+-----------+
2 rows in set (0.00 sec)

Id「100」のレコードが「Chris」から「Bob」に置き換わっているのが分かります。このようにREPLACE INTOを使えば、存在チェックやUPDATE文を別途書くことなく、重複データを自動的に入れ替えることができます。

まとめ

REPLACE INTOは、一意キーの重複時に「削除→挿入」を自動で行う構文です。手軽にUpsert的な処理が実現できる一方、既存レコードが完全に削除されてから挿入されるため、指定していないカラムの値も失われる点には注意が必要です。用途に応じてINSERT ... ON DUPLICATE KEY UPDATEとの使い分けを検討するとよいでしょう。

  1. MySQLのINSERT INTO文でWHERE句を使う2つの方法を実例つきで解説

    MySQLでは、INSERT INTOコマンドに条件付き挿入(WHERE句)を組み合わせることが可能です。INSERT文にはWHERE句を直接記述できませんが、SELECT文と組み合わせることで、条件を満たす場合だけ行を挿入するといった制御が実現できます。主な方法は以下の2つです。 方法1:ダミーテーブル(DUAL)を使う この方法では、ダミーテーブル「dual」から値をSELECTしながら条件を指定し、その結果をINSERTします。MySQLでもDUALが利用できるため、単一の値を条件付きで挿入したいケースに便利です。基本構文は以下の通りです。 INSERT INTO table_nam

  2. JavaでMySQLデータベースにデータを挿入する方法をわかりやすく解説

    JavaからMySQLデータベースにデータを挿入するには、SQLのINSERTコマンドを使用します。基本的な構文は以下の通りです。 INSERT INTO テーブル名(カラム名1, カラム名2, ......カラム名N) VALUES(値1, 値2, ......値N); ここからは、Javaプログラムを使って実際にMySQLデータベースへレコードを挿入する手順を、順を追って見ていきましょう。 ステップ1:MySQLでテーブルを作成する まず、データの挿入先となるテーブルをMySQL側に作成します。以下のクエリを実行してください。 mysql> create table Insert