【发布时间】: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
我想在 mysql 中使用 IF EXISTS 选项 DROP INDEX,但我没有发现任何可以使它起作用的东西。
DROP INDEX IF EXISTS index_name ON table_name;
有人有什么提示吗?
【问题讨论】:
标签: php mysql flow flow-framework
我没有看到使用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
试试这个,
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
【讨论】: