MySQL判空创建索引的存储过程

稻火 / 2023-05-15 / 原文

DROP PROCEDURE IF EXISTS add_Index;  
DELIMITER //
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);
SET @addstr = CONCAT(' CREATE INDEX ', p_idxname,' ON ',p_tablename,p_index);    

SELECT COUNT(*) INTO @cnt  
FROM information_schema.statistics  
WHERE TABLE_SCHEMA = p_dbname  
      AND table_name = p_tablename  
      AND index_name = p_idxname;
IF @cnt <=0 THEN  
    PREPARE stmt FROM   @addstr;  
  EXECUTE stmt;  
END IF;   
END;    
//
DELIMITER;

/*   
 * 传递参数并且执行,参数必须包括在''中   
 * */  
CALL add_Index ( 
    'bigdata-web',  
    'dsc_personnel_account',  
    'dsc_personnel_account_account_id_IDX',  
    '(account_id)'  
);