2016-10-04 984 views
4

我想使用选项IF EXISTS在MySQL中删除INDEX,但是我没有发现任何使它成功的东西。如何为mysql制作DROP INDEX IF EXISTS?

DROP INDEX IF EXISTS index_name ON table_name; 

任何人有任何提示吗?

+2

类似的问题:http://stackoverflow.com/questions/2480148/how-can-i-employ-if-exists-for-creating-or-dropping -in-index-in-mysql – 1000111

回答

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 
+0

你可以把'SET @query ...'放在'IF'中。 Nitpick,但为什么它会运行? :p – Drew

0

试试这个,

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