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

Я хочу DROP INDEX в MySQL с опцией IF EXISTS, но я не нашел ничего, что делает это работает.

DROP INDEX IF EXISTS index_name ON table_name;

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

4

Решение

Я не вижу прямого пути к 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
1

Другие решения

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

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

Я использовал это, и это сработало для меня.

ALTER TABLE `db_name`.`table_name` DROP INDEX IF EXISTS `index_name`
-1
По вопросам рекламы [email protected]