MySQLテーブルからUNIQUE制約を削除する方法をわかりやすく解説
MySQLのテーブルからUNIQUE制約(一意制約)を削除するには、まずそのUNIQUE制約によって作成されたインデックスの名前を確認する必要があります。インデックス名の確認には SHOW INDEX ステートメントを使用します。このステートメントの結果セットに含まれる「Key_name」列が、インデックスの名前を示しています。
インデックス名がわかれば、DROP INDEX ステートメントまたは ALTER TABLE ステートメントのいずれかを使って、UNIQUE制約を削除できます。それぞれの構文は以下の通りです。
構文
DROP INDEX インデックス名 ON テーブル名; または ALTER TABLE テーブル名 DROP INDEX インデックス名;
実際の例
ここでは、列「empno」にUNIQUE制約が設定されたテーブル「empl」を例に説明します。まず、SHOW INDEXステートメントでインデックス名を確認してみましょう。
mysql> Show Index from empl\G *************************** 1. row *************************** Table: empl Non_unique: 0 Key_name: empno Seq_in_index: 1 Column_name: empno Collation: A Cardinality: 0 Sub_part: NULL Packed: NULL Null: YES Index_type: BTREE Comment: Index_comment: 1 row in set (0.02 sec)
結果を見ると、インデックス名は「empno」であることがわかります。次に、ALTER TABLEステートメントを使ってUNIQUE制約を削除します。
mysql> ALTER TABLE empl DROP INDEX empno; Query OK, 0 rows affected (0.26 sec) Records: 0 Duplicates: 0 Warnings: 0
削除後の確認方法
UNIQUE制約が正しく削除されたかどうかは、DESCRIBEステートメントで確認できます。以下の結果では、列「empno」のKey欄が空になっており、UNIQUE制約が解除されたことがわかります。
mysql> describe empl; +--------+-------------+------+-----+---------+-------+ | Field | Type | Null | Key | Default | Extra | +--------+-------------+------+-----+---------+-------+ | empno | int(11) | YES | | NULL | | | F_name | varchar(20) | YES | | NULL | | +--------+-------------+------+-----+---------+-------+ 2 rows in set (0.04 sec)
また、SHOW INDEX from empl クエリを実行すると、MySQLは次のように空の結果セットを返します。これもインデックスが削除された証拠です。
mysql> Show index from empl; Empty set (0.00 sec)
DROP INDEXステートメントでの削除
なお、UNIQUE制約はDROP INDEXステートメントを使っても同様に削除できます。書き方は以下の通りです。
mysql> DROP INDEX empno on empl; Query OK, 0 rows affected (0.17 sec) Records: 0 Duplicates: 0 Warnings: 0
このように、まずSHOW INDEXでインデックス名を特定し、その名前を指定してDROP INDEXまたはALTER TABLEを実行すれば、MySQLテーブルからUNIQUE制約を簡単に削除できます。
-
MySQLテーブルから一意制約(UNIQUE制約)を削除する方法
一意制約を削除する基本構文MySQLでテーブルに設定された一意制約(UNIQUE制約)を削除したい場合は、ALTER TABLE文とDROP INDEXを組み合わせて使用します。基本的な構文は以下の通りです。ALTER TABLE テーブル名 DROP INDEX 一意制約名;ここでのポイントは、一意制約を作成した際に自動的に付与されるインデックス名を指定するという点です。実際の流れを理解するために、サンプルテーブルを使って順番に確認していきましょう。サンプルテーブルの作成まず、一意制約を持つテーブルを作成します。IdカラムとisGreaterThan18カラムに対して複合一意制約(UNIQU
-
MySQLデータベースの列から一意(ユニーク)なレコード数をカウントする方法
MySQLである列に含まれる重複しない(一意の)レコード数を集計したい場合は、集計関数 COUNT(DISTINCT ...) を GROUP BY 句と組み合わせて使用します。これにより、ユーザーごとの投稿メッセージ数のように、グループ単位での一意レコード数を簡単に取得できます。実際にサンプルを使って確認してみましょう。1. サンプルテーブルを作成するまず、以下のコマンドでテーブルを作成します。mysql> create table DemoTable ( UserName varchar(100), UserPostMessage text ); Query OK,