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

MySQLで複合一意制約(複合ユニークキー)を設定する方法をわかりやすく解説

MySQLでは、UNIQUE キーワードを使うことで、複数のカラムを組み合わせた「複合一意制約(コンパウンドユニーク制約)」を実現できます。これにより、指定したカラムの組み合わせが重複しないようにデータの整合性を保つことが可能です。

複合一意制約を追加する基本構文

テーブル作成時に UNIQUE 制約を定義する構文は以下のとおりです。

CREATE TABLE yourTableName
(
    yourColumnName1 datatype,
    yourColumnName2 datatype,
    yourColumnName3 datatype,
    .
    .
    N
    UNIQUE yourConstraintName(yourColumnName2, yourColumnName3)
);

このように、UNIQUE の後に任意の制約名を指定し、括弧内に一意性を持たせたいカラムをカンマ区切りで列挙します。

実際にテーブルを作成してみよう

それでは、具体的な例を見てみましょう。ここでは、学生情報を管理するテーブルを作成し、「StudentName(氏名)」と「StudentAge(年齢)」の組み合わせに対して一意制約を設定します。

mysql> create table UniqueDemo
    -> (
    -> StudentId int NOT NULL AUTO_INCREMENT PRIMARY KEY,
    -> StudentName varchar(100),
    -> StudentAge int,
    -> StudentMarks int
    -> ,
    -> UNIQUE age_NameConstraint(StudentName, StudentAge)
    -> );
Query OK, 0 rows affected (0.76 sec)

上記のクエリでは、StudentId を主キーとして自動採番(AUTO_INCREMENT)に設定し、さらに StudentName と StudentAge の組み合わせに対して「age_NameConstraint」という名前の一意制約を付与しています。これにより、同名・同年齢の学生レコードが重複して登録されることを防げます。

SHOW コマンドで制約(インデックス)を確認する方法

テーブルに設定された一意制約の名称は、SHOW コマンドを使って確認できます。構文は次のとおりです。

SHOW INDEX FROM yourTableName;

先ほど作成したテーブルに対して実行してみます。

mysql> SHOW INDEX FROM UniqueDemo;

実行結果の出力例

+------------+------------+--------------------+--------------+-------------+-----------+-------------+----------+--------+------+------------+---------+---------------+---------+
| Table      | Non_unique | Key_name           | Seq_in_index | Column_name | Collation | Cardinality | Sub_part | Packed | Null | Index_type | Comment | Index_comment | Visible |
+------------+------------+--------------------+--------------+-------------+-----------+-------------+----------+--------+------+------------+---------+---------------+---------+
| uniquedemo |          0 | PRIMARY            |            1 | StudentId   | A         |           0 | NULL     | NULL   |      | BTREE      |         |               | YES     |
| uniquedemo |          0 | age_NameConstraint |            1 | StudentName | A         |           0 | NULL     | NULL   | YES  | BTREE      |         |               | YES     |
| uniquedemo |          0 | age_NameConstraint |            2 | StudentAge  | A         |           0 | NULL     | NULL   | YES  | BTREE      |         |               | YES     |
+------------+------------+--------------------+--------------+-------------+-----------+-------------+----------+--------+------+------------+---------+---------------+---------+
3 rows in set (0.33 sec)

出力結果の見方

注目すべきポイントは以下の通りです。

  • Non_unique = 0:値が 0 の場合、そのインデックスは一意インデックスであることを示します。
  • Key_name:「PRIMARY」と「age_NameConstraint」の2つのインデックスが確認できます。
  • Seq_in_index:複合インデックス内でのカラムの順序を表します。age_NameConstraint は Seq_in_index 1 に StudentName、2 に StudentAge が割り当てられており、両カラムの組み合わせに対して一意性が適用されていることがわかります。

このように、MySQLでは UNIQUE キーワードを活用することで、単一カラムだけでなく複数カラムの組み合わせに対しても一意性を簡単に保証できます。データの重複を防ぎたいシーンでぜひ活用してください。

  1. MySQLで複合一意性制約を設定する方法

    はい、MySQLでは複数のカラムを組み合わせた一意性(複合一意性)を強制することができます。本記事では、実際にテーブルを作成しながら、その設定方法と動作をわかりやすく解説します。 複合一意性制約とは 複合一意性制約とは、単一のカラムではなく、複数のカラムを組み合わせた値の組み合わせに対して一意性を保証する制約です。例えば、「学生名」と「電話番号」の組み合わせが重複しないようにしたい場合に有効です。各カラム単体では同じ値が重複しても問題ありませんが、組み合わせとしては重複したデータを登録できなくなります。 テーブルの作成 まず、UNIQUE制約を使って複合一意性を設定したテーブルを作成します。

  2. MySQLでテーブルのすべての列を削除する方法|DROP TABLEコマンドの使い方を解説

    MySQLでテーブル内の全カラムを削除するには?MySQLでは、テーブルに存在するすべてのカラム(列)を1つずつ削除していくことはできません。すべての列を削除したい場合、つまりテーブル自体をデータベースから取り除きたい場合は、DROP TABLE コマンドを使用します。DROP TABLEの基本構文DROP TABLE テーブル名;このコマンドを実行すると、指定したテーブルとその中のすべてのデータ・構造が完全に削除されます。なお、この操作は元に戻せないため、実行前には必ず内容を確認してください。実際に試してみよう:サンプルテーブルの作成まずは動作を確認するために、以下のようにサンプルテーブルを