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

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文でユニークキーを追加するのが最もシンプルな方法です。テーブル作成後でも制約を後から追加できるため、既存テーブルのデータ品質を向上させたい場合にも活用できます。

  1. MySQLテーブルを一括更新する方法|ADDTIME関数で複数行の時刻データをまとめて変更

    MySQLでは、UPDATE文と関数を組み合わせることで、テーブル内の複数のレコードを一度に一括更新(バッチ更新)できます。本記事では、時刻型(TIME型)のカラムに対してADDTIME関数を使い、すべての行の時刻をまとめて加算・更新する手順を、実際のSQL文と実行結果付きでわかりやすく解説します。1. サンプルテーブルを作成するまず、時刻データを格納するためのテーブル「DemoTable」を作成します。mysql> create table DemoTable    -> (    -> Bre

  2. MySQLでテーブルが存在するかどうかを確認する方法【INFORMATION_SCHEMA.TABLES活用】

    MySQLでテーブルの存在を確認するにはMySQLにおいて、特定のテーブルがデータベース内に存在するかどうかを確認したい場合、INFORMATION_SCHEMA.TABLES を利用するのが一般的な方法です。このシステムビューには、サーバー上のすべてのデータベースとテーブルに関するメタデータが格納されており、これを参照することで目的のテーブルが存在するかを簡単に調べられます。基本構文テーブルの存在確認は、以下のようなSELECT文で行います。select table_name from information_schema.tables where table_schema=database