Как сделать DROP INDEX IF EXISTS для mysql?

Я хочу DROP INDEX в mysql с опцией IF EXISTS, но я не нашел ничего, что заставило бы его работать.

DROP INDEX IF EXISTS index_name ON table_name;

У кого-нибудь есть подсказка?


person Rayuth You    schedule 04.10.2016    source источник
comment
аналогичный вопрос: stackoverflow.com/questions/2480148/   -  person 1000111    schedule 04.10.2016


Ответы (2)


Я не вижу прямого пути к DROP INDEX с помощью IF EXISTS. В качестве обходного пути я написал следующую процедуру, которая работает для меня.

CREATE PROCEDURE `DropIndexIfExists`(
    IN i_table_name VARCHAR(128),
    IN i_index_name VARCHAR(128)
    )
    BEGIN

    SET @tableName = i_table_name;
    SET @indexName = i_index_name;
    SET @indexExists = 0;

    SELECT 
        1
    INTO @indexExists FROM
        INFORMATION_SCHEMA.STATISTICS
    WHERE
        TABLE_NAME = @tableName
            AND INDEX_NAME = @indexName;

    SET @query = CONCAT(
        'DROP INDEX ', @indexName, ' ON ', @tableName
    );
    IF @indexExists THEN
        PREPARE stmt FROM @query;
        EXECUTE stmt;
        DEALLOCATE PREPARE stmt;
    END IF;
    END
person Man    schedule 04.10.2016
comment
вы можете поместить свой SET @query... внутрь IF. Придирка, а иначе зачем бы она работала? :п - person Drew; 05.10.2016

Попробуй это,

create procedure DeleteIndex()
begin

IF EXISTS ( SELECT * FROM INFORMATION_SCHEMA.STATISTICS  WHERE TABLE_NAME = 'TableName'
            AND INDEX_NAME = 'IndexName' AND INDEX_SCHEMA='DbName') THEN
   ALTER TABLE  TableName DROP index THead2;
END IF;
END
person Prakash S    schedule 05.10.2016