I want to DROP INDEX in mysql with option IF EXISTS but I have found nothing that make it works.
DROP INDEX IF EXISTS index_name ON table_name;
Anyone has any hint?
Right-click the table that contains the index you want to delete and click Design. On the Table Designer menu, click Indexes/Keys. In the Indexes/Keys dialog box, select the index you want to delete. Click Delete.
Try the following command: show index from `my_answers`; then inspect the key name of your index and drop it by its name.
DROP TABLE always removes any indexes, rules, triggers, and constraints that exist for the target table. However, to drop a table that is referenced by a view or a foreign-key constraint of another table, CASCADE must be specified.
Try this,
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
I do not see any straight-forward way to DROP INDEX
using IF EXISTS
.
As a workaround, I wrote the following Procedure, which works for me.
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
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With