mysql如何使DROP INDEX IF EXISTS存在?

Ray*_*You 5 php mysql flow flow-framework

我想用IF EXISTS选项在mysql中删除索引,但没有发现任何使它起作用的东西。

DROP INDEX IF EXISTS index_name ON table_name;
Run Code Online (Sandbox Code Playgroud)

有人有提示吗?

Man*_*Man 11

我没有看到任何直接的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
Run Code Online (Sandbox Code Playgroud)

  • 您可以将“SET @query...”放在“IF”内。吹毛求疵,但为什么它会以其他方式运行呢?:p (2认同)

小智 7

尝试这个,

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
Run Code Online (Sandbox Code Playgroud)