给一个表字段增加索引,需要可重复执行,于是只能用存储过程解决了。
下面记下简单的SQL语句:
#给细目表条目的FK_ENUMTABLEID字段创建索引
DROP PROCEDURE IF EXISTS add_idx;
DELIMITER //
create procedure add_idx(IN p_tablename varchar(200), IN p_idxname VARCHAR(200), IN p_columns VARCHAR(200))
begin
DECLARE str VARCHAR(250);
set @str=concat(' CREATE index ',p_idxname,' on ',p_tablename,'(',p_columns,')');
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 ;
select '创建索引成功!';
ELSE
select '该索引已存在!';
end if;
end
//
DELIMITER ;
call add_idx('tbl_enumtableitem','enumtableitem_FK_ENUMTABLEID','FK_ENUMTABLEID');
注意:mysql workbench是官方推荐的数据库管理工具,在这上面能成功运行的SQL肯定兼容其他的工具!
比如 如果不加‘delimiter//’,在有的工具上运行不报错(比如navicat),但换其他的可能就执行不成功了。