失眠网,内容丰富有趣,生活中的好帮手!
失眠网 > MySQL——删除索引前判断是否存在索引再删除

MySQL——删除索引前判断是否存在索引再删除

时间:2021-09-25 10:36:27

相关推荐

MySQL——删除索引前判断是否存在索引再删除

mysql的drop index语句不支持if exists条件,在sql中先删除索引,再创建索引,如果对于新建的数据库,库中没有该索引,就会报错,导致后面的sql不再执行。

因此需要使用存储过程来判断索引是否存在,如果存在则删除。

sql代码如下:

DROP PROCEDURE IF EXISTS del_idx;create procedure del_idx(IN p_tablename varchar(200), IN p_idxname VARCHAR(200))beginDECLARE str VARCHAR(250);set @str=concat(' drop index ',p_idxname,' on ',p_tablename); select count(*) into @cnt from information_schema.statistics where table_name=p_tablename and index_name=p_idxname ;if @cnt >0 then PREPARE stmt FROM @str;EXECUTE stmt ;end if;end ;call del_idx('table_name','index_name');ALTER TABLE table_name ADD INDEX index_name (column1, column2);

SELECT 'create procedure sp_dropindex' AS prompt;DROP PROCEDURE IF EXISTS sp_dropindex;DELIMITER //CREATE PROCEDURE sp_dropindex(IN databasename VARCHAR(50) , IN tablenameVARCHAR(50) , IN indexnameVARCHAR(50))proc:BEGIN DECLARE str VARCHAR(512) DEFAULT NULL;DECLARE cnt INT DEFAULT 0;SET @str = CONCAT(' drop index ',indexname,' on ',databasename,'.',tablename);SELECT COUNT(*) INTO cnt FROM information_schema.statistics WHERE TABLE_SCHEMA=databasename AND TABLE_NAME=tablenameAND INDEX_NAME=indexname;IF cnt > 0 THENPREPARE stmt FROM @str;EXECUTE stmt;END IF;LEAVE proc;END//DELIMITER ;

示例:比如要创建一个索引,为了防止重复索引而导致创建失败,可以先删除索引再创建索引,确保脚本不出错:

CALL sp_dropindex('crawler','t_user','username_idx');CREATE INDEX username_idx ON t_user(username);

其中,crawler是数据库名称,t_user是表名称,username_idx是索引名称。

原文链接:原文

如果觉得《MySQL——删除索引前判断是否存在索引再删除》对你有帮助,请点赞、收藏,并留下你的观点哦!

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。