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との使い分けを検討するとよいでしょう。
-
MySQLのINSERT INTO文でWHERE句を使う2つの方法を実例つきで解説
MySQLでは、INSERT INTOコマンドに条件付き挿入(WHERE句)を組み合わせることが可能です。INSERT文にはWHERE句を直接記述できませんが、SELECT文と組み合わせることで、条件を満たす場合だけ行を挿入するといった制御が実現できます。主な方法は以下の2つです。 方法1:ダミーテーブル(DUAL)を使う この方法では、ダミーテーブル「dual」から値をSELECTしながら条件を指定し、その結果をINSERTします。MySQLでもDUALが利用できるため、単一の値を条件付きで挿入したいケースに便利です。基本構文は以下の通りです。 INSERT INTO table_nam
-
JavaでMySQLデータベースにデータを挿入する方法をわかりやすく解説
JavaからMySQLデータベースにデータを挿入するには、SQLのINSERTコマンドを使用します。基本的な構文は以下の通りです。 INSERT INTO テーブル名(カラム名1, カラム名2, ......カラム名N) VALUES(値1, 値2, ......値N); ここからは、Javaプログラムを使って実際にMySQLデータベースへレコードを挿入する手順を、順を追って見ていきましょう。 ステップ1:MySQLでテーブルを作成する まず、データの挿入先となるテーブルをMySQL側に作成します。以下のクエリを実行してください。 mysql> create table Insert