【问题标题】:How to make DROP INDEX IF EXISTS for mysql?如何为 mysql 制作 DROP INDEX IF EXISTS?
【发布时间】:2017-02-12 10:11:58
【问题描述】:

我想在 mysql 中使用 IF EXISTS 选项 DROP INDEX,但我没有发现任何可以使它起作用的东西。

DROP INDEX IF EXISTS index_name ON table_name;

有人有什么提示吗?

【问题讨论】:

标签: php mysql flow flow-framework


【解决方案1】:

我没有看到使用IF EXISTS 的任何直截了当的方法DROP INDEX。 作为一种解决方法,我编写了以下适用于我的过程。

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

【讨论】:

  • 你可以把你的SET @query...放在IF里面。 Nitpick,但为什么它会以其他方式运行? :p
【解决方案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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-07-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-05-11
    相关资源
    最近更新 更多