SQL mysql自動判斷表中索引是否存在,不存在則創建

問題描述: 判斷MYSQL數據庫中某些表的某些字段索引是否有創建?形成自動化判斷腳本(以下簡稱“腳本”)。
解決思路:
1、整體方向:利用mysql存儲過程去編寫腳本;
衍生知識點:mysql存儲過程
存儲過程概念:

– MySql判斷表中某字段上是否有索引
SELECT * FROM information_schema.statistics WHERE table_schema = ‘epidemic’ – 數據庫名
AND table_name = ‘student_qd_info’ – 表名
AND column_name = ‘BJ’ – 字段名

–判斷單個索引是否存在
delimiter //
CREATE PROCEDURE proc2 ( INOUT num1 INT ) BEGIN
IF
EXISTS ( – MySql判斷表中某字段上是否有索引
SELECT count( * ) FROM information_schema.statistics WHERE table_schema = ‘epidemic’ – 數據庫名
AND table_name = ‘student_qd_info’ – 表名
AND column_name = ‘BJ’ – 字段名
) THEN
SET num1 = 1;
END IF;
END //
delimiter;

– 判斷索引是否存在,不存在則創建索引
DROP PROCEDURE
IF
EXISTS add_index;

DELIMITER //
CREATE PROCEDURE add_index ( IN str1 VARCHAR(50),IN str2 VARCHAR(50)) BEGIN
DECLARE
target_database VARCHAR ( 100 );
DECLARE
target_table_name VARCHAR ( 100 );
DECLARE
target_column_name VARCHAR ( 100 );
DECLARE
target_index_name VARCHAR ( 100 );
SET target_table_name = str1;
SET target_column_name = str2;
SET target_index_name = CONCAT(str1,’_’,str2,’_INDEX’);
SELECT DATABASE() INTO target_database;
IF NOT EXISTS ( SELECT * FROM information_schema.statistics WHERE table_schema = target_database AND table_name = target_table_name AND index_name = target_index_name ) THEN
SET @statement = CONCAT( "ALTER TABLE ", target_table_name, " ADD INDEX “, target_index_name, “(”, target_column_name, " ASC )” );
PREPARE STMT
FROM
@statement;
EXECUTE STMT;
END IF;
END //
DELIMITER ;
call add_index(‘student_qd_info’,‘bj’);

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章