MYSQL创建索引之存储过程

/*   
 * 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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值