ALTER TABLE文以外で既存のMySQLテーブルのフィールドにUNIQUE制約を適用する方法
既存のMySQLテーブルのフィールドにUNIQUE制約を適用する場合、ALTER TABLEステートメントのほかに、CREATE UNIQUE INDEXステートメントを使用する方法もあります。ユニークインデックスを作成することで、指定した列に対して重複した値の登録を防ぐことができます。
CREATE UNIQUE INDEXの構文
基本的な構文は以下の通りです。
CREATE UNIQUE INDEX index_name ON table_name(Column_name);
実行例
ここでは、「Test5」という名前の次のようなテーブルがあると仮定し、列「ID」にUNIQUE制約を追加したいケースを考えます。CREATE UNIQUE INDEXコマンドを使えば、以下のように簡単に実現できます。
mysql> DESCRIBE TEST5; +-------+-------------+------+-----+---------+-------+ | Field | Type | Null | Key | Default | Extra | +-------+-------------+------+-----+---------+-------+ | ID | int(11) | YES | | NULL | | | Name | varchar(20) | YES | | NULL | | +-------+-------------+------+-----+---------+-------+ 2 rows in set (0.04 sec) mysql> CREATE UNIQUE INDEX ID_UNQ ON TEST5(ID); Query OK, 0 rows affected (0.20 sec) Records: 0 Duplicates: 0 Warnings: 0 mysql> DESCRIBE test5; +-------+-------------+------+-----+---------+-------+ | Field | Type | Null | Key | Default | Extra | +-------+-------------+------+-----+---------+-------+ | ID | int(11) | YES | UNI | NULL | | | Name | varchar(20) | YES | | NULL | | +-------+-------------+------+-----+---------+-------+ 2 rows in set (0.04 sec)
まずDESCRIBEコマンドでテーブル構造を確認すると、初期状態では「ID」列のKey欄は空です。そこで「CREATE UNIQUE INDEX ID_UNQ ON TEST5(ID);」を実行してユニークインデックスを作成すると、再度DESCRIBEで確認した際に「ID」列のKey欄が「UNI」と表示されます。これにより、UNIQUE制約が正常に適用されたことが確認できます。
なお、既に重複データが存在する列にユニークインデックスを作成しようとするとエラーになるため、事前にデータの重複チェックを行っておくことが重要です。
-
既存のMySQLテーブルを削除するPHP関数とは?mysql_queryの使い方を解説
PHPでは、既存のMySQLテーブルを削除するために mysql_query 関数を使用します。この関数は2つのパラメータを受け取り、処理が成功した場合は TRUE、失敗した場合は FALSE を返します。 構文 bool mysql_query( sql, connection ); パラメータの詳細 番号パラメータと説明 1.sql必須 – 既存のMySQLテーブルを削除するためのSQLクエリ(例:DROP TABLE テーブル名)を指定します。 2.connection任意 – MySQLへの接続リソースを指定します。省略した場合は、mysql_connect() によって最後に
-
MySQLのALTER TABLEで一意制約(UNIQUE)を追加する方法
MySQLでは、ALTER TABLE文を使うことで、すでに作成済みのテーブルに対して後から一意制約(UNIQUE制約)を追加できます。一意制約を設定すると、指定したカラム(または複数カラムの組み合わせ)に重複した値を挿入できなくなり、データの整合性を保つことができます。1. テーブルを作成するまず、サンプル用のテーブルを作成しましょう。ここでは「FirstName(名)」と「LastName(姓)」の2つのカラムを持つテーブルを用意します。mysql> create table DemoTable1811 ( FirstName varchar(20), Las