📚

MySQL 8.0で DROP INDEX IF EXIST~が使えない!

2024/11/14に公開

該当のインデックスが存在する場合、インデックスを削除したい

該当のインデックスが存在する場合、インデックスを削除したいというときがあった場合、
パッと思いつくのは以下のケースではないでしょうか?

DROP INDEX IF EXIST 'インデックス名'

しかし、MySQL 8.0ではその構文が使えないのです。
どうすれば良いのかというと

以下のストアドプロシージャを組んで実行してください!

ストアドプロシージャ

CREATE PROCEDURE `ストアドプロシージャ名`()
BEGIN
    IF EXISTS (
        SELECT *
        FROM INFORMATION_SCHEMA.STATISTICS
        WHERE `TABLE_NAME` = 'テーブル名'
          AND `INDEX_NAME` = 'インデックス名'
    ) THEN
        ALTER TABLE `テーブル名` DROP INDEX `インデックス名`;
    END IF;
END;

実行

CALL `ストアドプロシージャ名`();

なんと求めている動作が確認できるのです。

日本語で解説しているところがなかったので書いてみました。

お困りの方はお試しください。

Discussion