MySQLテーブルに重複データが登録されないようにする方法
MySQLテーブルに重複データが登録されないようにする方法
MySQLのテーブルに重複するデータ(重複エントリ)が登録されないようにするには、ユニークキー(UNIQUE KEY)を追加します。ユニークキーが設定されたカラムには同じ値を持つレコードを複数挿入できず、重複データを自動的にブロックしてくれます。
基本構文
ユニークキーを追加するための基本構文は以下のとおりです。
ALTER TABLE テーブル名 ADD CONSTRAINT UNIQUE KEY(カラム名);
それでは、実際にテーブルを作成しながらこの構文の使い方を確認していきましょう。
1. テーブルを作成する
まずはサンプル用のテーブルを作成します。以下がテーブル作成のクエリです。
mysql> CREATE TABLE RemoveDuplicateEntry
-> (
-> Id int,
-> Name varchar(100)
-> ) ENGINE = MyISAM;
Query OK, 0 rows affected (0.15 sec)
2. ユニークキーを追加する
次に、冒頭で紹介した構文を使って「Id」カラムにユニーク制約を設定します。
mysql> ALTER TABLE RemoveDuplicateEntry ADD CONSTRAINT UNIQUE KEY(Id); Query OK, 0 rows affected (0.56 sec) Records: 0 Duplicates: 0 Warnings: 0
3. テーブル構造を確認する
DESCコマンドでテーブル構造を確認してみましょう。
mysql> DESC RemoveDuplicateEntry;
実行結果は以下のとおりです。「Id」カラムのKey列に「UNI」と表示されており、ユニークキーが正しく設定されていることがわかります。
+-------+--------------+------+-----+---------+-------+ | Field | Type | Null | Key | Default | Extra | +-------+--------------+------+-----+---------+-------+ | Id | int(11) | YES | UNI | NULL | | | Name | varchar(100) | YES | | NULL | | +-------+--------------+------+-----+---------+-------+ 2 rows in set (0.00 sec)
4. 重複データの挙動を確認する
それでは、レコードを挿入して動作を確認してみましょう。まずは通常のINSERT文です。
mysql> INSERT INTO RemoveDuplicateEntry VALUES(101,'John'); Query OK, 1 row affected (0.06 sec)
1件目は問題なく登録されました。続けて、まったく同じレコードを再度挿入してみます。
mysql> INSERT INTO RemoveDuplicateEntry VALUES(101,'John'); ERROR 1062 (23000): Duplicate entry '101' for key 'Id'
このように、ユニーク制約を設定したカラムに重複する値を挿入しようとすると、「ERROR 1062 (23000): Duplicate entry」というエラーが発生し、登録が拒否されます。
5. テーブル内のレコードを確認する
最後にSELECT文でテーブル内の全レコードを確認します。
mysql> SELECT * FROM RemoveDuplicateEntry;
実行結果を見ると、重複データは登録されず、最初の1件だけが保存されていることがわかります。
+------+------+ | Id | Name | +------+------+ | 101 | John | +------+------+ 1 row in set (0.00 sec)
補足:重複エラーを回避しつつ登録したい場合
ユニーク制約を設定した状態でも、重複時にエラーではなく単純に挿入をスキップしたい場合は「INSERT IGNORE」、既存レコードを更新したい場合は「ON DUPLICATE KEY UPDATE」句を活用すると便利です。用途に応じて使い分けると、より堅牢なデータ管理が実現できます。
まとめ
MySQLで重複データの登録を防ぐには、ALTER TABLE文でユニークキーを追加するのが最もシンプルな方法です。テーブル作成後でも制約を後から追加できるため、既存テーブルのデータ品質を向上させたい場合にも活用できます。
-
MySQLテーブルを一括更新する方法|ADDTIME関数で複数行の時刻データをまとめて変更
MySQLでは、UPDATE文と関数を組み合わせることで、テーブル内の複数のレコードを一度に一括更新(バッチ更新)できます。本記事では、時刻型(TIME型)のカラムに対してADDTIME関数を使い、すべての行の時刻をまとめて加算・更新する手順を、実際のSQL文と実行結果付きでわかりやすく解説します。1. サンプルテーブルを作成するまず、時刻データを格納するためのテーブル「DemoTable」を作成します。mysql> create table DemoTable -> ( -> Bre
-
MySQLでテーブルが存在するかどうかを確認する方法【INFORMATION_SCHEMA.TABLES活用】
MySQLでテーブルの存在を確認するにはMySQLにおいて、特定のテーブルがデータベース内に存在するかどうかを確認したい場合、INFORMATION_SCHEMA.TABLES を利用するのが一般的な方法です。このシステムビューには、サーバー上のすべてのデータベースとテーブルに関するメタデータが格納されており、これを参照することで目的のテーブルが存在するかを簡単に調べられます。基本構文テーブルの存在確認は、以下のようなSELECT文で行います。select table_name from information_schema.tables where table_schema=database