/*
* MYSQL判断索引时,由于MYSQL不支持DROP INDEX IF EXISTS......,所以要用到存储过程进行判断和创建
* 注:第6行 和 第33行的双斜杠不能删除!!!!!
* */
DROP PROCEDURE IF EXISTS add_Index;
DELIMITER //
/*
* 创建存储过程 add_Index(参数1,参数2,参数3,参数4) ,参数在下面的CALL add_Index()对应传递
* */
CREATE PROCEDURE add_Index (IN p_dbname VARCHAR (200),IN p_tablename VARCHAR (200),IN p_idxname VARCHAR (200),IN p_index VARCHAR (200))
BEGIN
DECLARE addstr VARCHAR (250);
/*
* CONCAT(为名称为参数2的表的(p_tablename) 名称为参数4的字段(p_index) 创建 名称为参数3的索引(p_idxname))
* */
SET @addstr = CONCAT(' CREATE INDEX ', p_idxname,' ON ',p_tablename,p_index);
/*
* 下面的这条语句就是查询表中是否存在该条索引,用变量cnt接收查询到的个数
* */
SELECT COUNT(*) INTO @cnt
FROM information_schema.statistics
WHERE TABLE_SCHEMA = p_dbname
AND table_name = p_tablename
AND index_name = p_idxname;
/*
* 在用变量cnt判断是否小于或等于0,如果大于0则存在 不创建,否则创建
* */
IF @cnt <=0 THEN
PREPARE stmt FROM @addstr;
EXECUTE stmt;
END IF;
END;
//
DELIMITER ;
/*
* 传递参数并且执行,参数必须包括在''中
* */
CALL add_Index (
'数据库名称',
'表名称',
'索引名称',
'(字段名称1,字段名称2,。。。可以有一个或者多个)'
);
注:新手可以直接复制粘贴,CALL add_index()里面只需要传递你自己的参数
转载于:https://my.oschina.net/liubao425/blog/3008315