2011-11-20 34 views
2

我需要編寫一個腳本來檢查,如果一個列在表索引它屬於,如果沒有則添加索引它。 MySQL似乎沒有ADD INDEX IF NOT EXISTS檢查一列被編 - MySQL的

在MySQL中這樣做的最好方法是什麼?

回答

4

http://dev.mysql.com/doc/refman/5.1/en/create-index.html

有一個存儲過程,這是否(記住,不是我的代碼,只是 先打上谷歌與mysql add index if not exists作爲搜索串)。

DELIMITER $$ 
DROP PROCEDURE IF EXISTS `create_index_if_not_exists`$$ 

CREATE DEFINER=`user`@`%` PROCEDURE `create_index_if_not_exists`(table_name_vc varchar(50), index_name_vc varchar(50), field_list_vc varchar(200)) 
SQL SECURITY INVOKER 
BEGIN 

set @Index_cnt = (
select count(1) cnt 
FROM INFORMATION_SCHEMA.STATISTICS 
WHERE table_name = table_name_vc 
and index_name = index_name_vc 
); 

IF ifnull(@Index_cnt,0) = 0 THEN set @index_sql = concat('Alter table ',table_name_vc,' ADD INDEX ',index_name_vc,'(',field_list_vc,');'); 

PREPARE stmt FROM @index_sql; 
EXECUTE stmt; 

DEALLOCATE PREPARE stmt; 

END IF; 

END$$ 
DELIMITER ; 

在同一頁面下面有一個替代版本。

+0

奇妙的是,我認爲這正是我需要的。我確信我已經看過那個頁面,但錯過了這個。愚蠢的我,非常感謝:) – Olizt

0

也許這可以幫助你前進:

SHOW INDEX FROM my_table WHERE Key_name = 'index_to_check'; 
+0

非常感謝這一點,但是我不知道如何將它放入IF條件來添加索引,如果它不存在?會很好,如果我可以有這樣的事情:IF(上述查詢返回結果)然後添加索引abc ... – Olizt