インデックスおよびプライマリキーを削除する(DROP INDEX文, ALTER TABLE文)
MySQL では DROP INDEX 文および ALTER TABLE 文を使って作成済みのインデックスおよびプライマリーキー(主キー)を削除することができます。ここでは MySQL でインデックスおよびプライマリキーを削除する方法について解説します。
(Last modified: )
目次
DROP INDEX 文を使ってインデックスを削除する
DROP INDEX 文を使ってインデックスを削除する方法です。書式は次のとおりです。
DROP INDEX index_name ON tbl_name
インデックス名( index_name )とインデックスが作成されているテーブル名( tbl_name )を指定してインデックスを削除します。
実際に試してみます。次のようなテーブルを作成しました。その後で、 user テーブルの id カラムを対象にインデックスを作成しています。
create table user(id int, name varchar(10));
create index userid on user(id);
作成されたインデックスを確認します。
show index from user\G
それではインデックスを削除します。次のように実行してください。
drop index userid on user;
インデックスが削除されました。
それでは確認のために user テーブルに作成されているインデックスを確認してみます。
インデックスが削除されていることが確認できました。
DROP INDEX 文を使ってプライマリーキー(主キー)を削除する
テーブルに対して PRIMARY KEY 制約を設定するとプライマリキー(主キー)と呼ばれるインデックスが作成されます。 PRIMARY KEY 制約によって作成されたインデックスも DROP INDEX 文を使って削除することができますが、注意点が 1 つあります。 PRIMARY KEY 制約によって作成されたインデクス名は必ず PRIMARY になりますが、 PRIMARY は MySQL の予約語のためインデックスを削除する場合はインデックス名を引用符で囲う必要があります。
それでは実際に試してみます。次のようなテーブルを作成しました。 id カラムには PRIMARY KEY 制約が設定されています。
create table user(id int not null primary key, name varchar(10));
SHOW CREAT TABLE 文で user テーブルと同じテーブルを作成する場合の SQL 文を確認しておきます。
show create table user\G
テーブル作成時に作成されたインデックスを確認します。
show index from user\G
作成されたインデックスの名前( Key_name )が PRIMARY となっています。
では PRIMARY インデックスを削除するために次のように実行してみます。
drop index PRIMARY on user;
すると You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'PRIMARY on テーブル名' at line 1 というエラーが発生してインデックスが削除できませんでした。
MySQL では予約語として登録されている単語を識別子として記述する場合には引用符(バッククォート `)で囲う必要があります。(詳細は「識別子と予約語」を参照してください)。 PRIMARY は MySQL の予約語のため、 PRIMARY という名前のインデックスを削除する場合は次のように実行してください。
drop index `PRIMARY` on user;
今度は無事 PRIMARY インデックスを削除することができました。
それでは確認のために user テーブルに作成されているインデックスを確認してみます。
インデックスが削除されていることが確認できました。
また SHOW CREAT TABLE 文でインデックスを削除したあとの user テーブルと同じテーブルを作成する場合の SQL 文を確認しておきます。
show create table user\G
テーブル作成時には記載があった PRIMARY KEY (`id`) がなくなっていることが確認できます。
テーブル作成時 Table: user Create Table: CREATE TABLE `user` ( `id` int(11) NOT NULL, `name` varchar(10) DEFAULT NULL, PRIMARY KEY (`id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci インデックス削除後 Table: user Create Table: CREATE TABLE `user` ( `id` int(11) NOT NULL, `name` varchar(10) DEFAULT NULL ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci
DROP INDEX 文を使ってプライマリキー(主キー)を削除する方法について解説しました。
ALTER TABLE 文を使ってインデックスを削除する
ALTER TABLE 文を使ってインデックスを削除する方法です。書式は次のとおりです。
ALTER TABLE tbl_name DROP INDEX index_name
インデックスが作成されているテーブル名( tbl_name )に対してインデックス名( index_name )の削除を行います。
実際に試してみます。次のようなテーブルを作成しました。その後で、 user テーブルの id カラムを対象にインデックスを作成しています。
create table user(id int, name varchar(10));
create index userid on user(id);
作成されたインデックスを確認します。
show index from user\G
今回インデックスを削除するのに ALTER TABLE 文を使用しますあg、。ALTER TABLE 文は作成済みのテーブルの定義を変更するために使用されるものですが、今回はテーブルを作成したあとでインデックスを作成しておりテーブル作成時にインデックスを作成したわけではありません。ただ SHOW CREAT TABLE 文で user テーブルと同じテーブルを作成する場合の SQL 文を確認してみると、あとからインデックスを作成した場合でもテーブル作成時にインデクスを作成した場合と同じ扱いになっているようです。
show create table user\G
ではインデックスを削除します。次のように実行してください。
alter table user drop index userid;
インデックスが削除されました。
それでは確認のために user テーブルに作成されているインデックスを確認してみます。
インデックスが削除されていることが確認できました。
ALTER TABLE 文を使ってプライマリーキー(主キー)を削除する
ALTER TABLE 文を使ってプライマリーキー(主キー)を削除する方法です。書式は次のとおりです。
ALTER TABLE tbl_name DROP PRIMARY KEY
テーブル名を指定しするとテーブルに設定されているプライマリキーが削除されます。
それでは実際に試してみます。次のようなテーブルを作成しました。 id カラムには PRIMARY KEY 制約が設定されています。
create table user(id int not null primary key, name varchar(10));
テーブル作成時に作成されたインデックスを確認します。
show index from user\G
PRIMARY KEY 制約で作成されたインデックスの名前は PRIMARY となります。
では PRIMARY インデックスを削除するために次のように実行してみます。
alter table user drop primary key;
PRIMARY インデックスを削除することができました。
それでは確認のために user テーブルに作成されているインデックスを確認してみます。
インデックスが削除されていることが確認できました。
-- --
DROP INDEX 文および ALTER TABLE 文を使ってインデックスおよびプライマリキー(主キー)を削除する方法について解説しました。
( Written by Tatsuo Ikura )
著者 / TATSUO IKURA
これから IT 関連の知識を学ばれる方を対象に、色々な言語でのプログラミング方法や関連する技術、開発環境構築などに関する解説サイトを運営しています。