You may want to check to see if the index exists first.
Just query the table INFORMATION_SCHEMA.STATISTICS:

SELECT COUNT(1) FROM INFORMATION_SCHEMA.STATISTICS
WHERE table_schema = '<given schema>'
AND table_name = '<given table name>'
AND index_name = '<given index name>';

This returns the number of columns the index contains.

If this query returns zero(0), then the index does not exist.

If this query returns a positive number, then call
ALTER TABLE <tbl-name> DROP INDEX <index-name>;

You may want to write this stored procedure to do this.
Here is the Code (change the 'util' schema to the schema you want) :

DELIMITER $$

DROP PROCEDURE IF EXISTS `util`.`sp_DropIndex` $$
CREATE PROCEDURE `util`.`sp_DropIndex` (tblSchema VARCHAR(64),tblName 
VARCHAR(64),ndxName VARCHAR(64))
BEGIN

    DECLARE IndexColumnCount INT;
    DECLARE SQLStatement VARCHAR(256);

    SELECT COUNT(1) INTO IndexColumnCount
    FROM information_schema.statistics
    WHERE table_schema = tblSchema
    AND table_name = tblName
    AND index_name = ndxName;

    IF IndexColumnCount > 0 THEN
        SET SQLStatement = CONCAT('ALTER TABLE `',tblSchema,'`.`',tblName,'` 
DROP INDEX `',ndxName,'`');
        SET @SQLStmt = SQLStatement;
        PREPARE s FROM @SQLStmt;
        EXECUTE s;
        DEALLOCATE PREPARE s;
    END IF;

END $$

DELIMITER ;

Give it a try !!!

-----Original Message-----
From: Rob Wultsch [mailto:[EMAIL PROTECTED]
Sent: Monday, December 03, 2007 12:51 PM
To: Adam Lipscombe
Cc: mysql@lists.mysql.com
Subject: Re: how to "drop index if exists"

On Nov 29, 2007 4:34 AM, Adam Lipscombe <[EMAIL PROTECTED]> wrote:
> Folks
>
>
> How can one conditionally drop an index in MySQL?
>
> Googling shows that the "drop index" does not support an "if exists" 
> qualifier - apparently a bug
> has been raised but as far as I know its not fixed yet.
>
> Does anyone know of a work-around?
>
> TIA - Adam
>

Sent my first response late at night and not the community... And the
response  also sucked.
DROP INDEX is mapped to ALTER TABLE tbl_name
 DROP INDEX.
ALTER IGNORE TABLE tbl_name
 DROP INDEX ought to be functionally equivalent to IF EXISTS. What is your goal?

--
MySQL General Mailing List
For list archives: http://lists.mysql.com/mysql
To unsubscribe:    http://lists.mysql.com/[EMAIL PROTECTED]


--
MySQL General Mailing List
For list archives: http://lists.mysql.com/mysql
To unsubscribe:    http://lists.mysql.com/[EMAIL PROTECTED]

Reply via email to