使用存储过程删除字段和索引
极客学长 2015-11-01 0
MySQL
今天对公司OA系统的数据表进行了一些重构,需要删除很多字段和索引,但是发现有两个问题
删除字段的语句要些很多变,好麻烦的说
当字段或者索引不存在时会报错,这样下面sql语句就会被中断执行,这个更麻烦
所以第一时间就想到了使用mysql的存储过程就可以解决这个问题,这里记录一下sql语句,以便以后借鉴。
# 删除字段
DROP PROCEDURE IF EXISTS Del_Col;
-- 创建删除字段的存储过程
create procedureDel_Col (IN p_tablename VARCHAR(200), IN p_col VARCHAR(200))
BEGIN
if exists (select * from information_schema.columns WHERE table_name = p_tablename AND column_name = p_col) then
alter table p_tablename drop column p_col;
end if;
END $$
DELIMITER ;
CALL Del_Col ('user', 'country_id');
# 删除索引
-- 删除已经存在的存储过程 DROP PROCEDURE IF EXISTS Del_idx; DELIMITER $$ -- 创建删除索引的存储过程 create procedure Del_idx(IN p_tablename VARCHAR(200), IN p_idxname VARCHAR(200)) BEGIN
DECLARE 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 $$
DELIMITER ;
-- 删除文章索引 CALL Del_idx('article', 'userid');
本站博文如非注明转载则均属作者原创文章,引用或转载无需申请版权或者注明出处,如需联系作者请加微信: geekmaster01