如何为mysql制作DROP INDEX IF EXISTS?

时间:2016-10-04 09:40:39

标签: php mysql flow flow-framework

我想在mysql中使用选项IF EXISTS进行DROP INDEX,但我找不到任何可以使它工作的东西。

DROP INDEX IF EXISTS index_name ON table_name;

任何人都有任何暗示吗?

3 个答案:

答案 0 :(得分:2)

试试这个,

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

答案 1 :(得分:1)

我没有看到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

答案 2 :(得分:-2)

我用了这个,对我有用。

ALTER TABLE `db_name`.`table_name` DROP INDEX IF EXISTS `index_name`