MySQL没有直接类似建表语句常用的create xxx if exists yyy这样的语句来判断索引是否存在。
如果需要单独建索引,重复索引会导致脚本出错(Duplicate key)。
此时可以用存储过程来解决,看代码便知:

SELECT 'create procedure sp_dropindex' AS prompt;
DROP PROCEDURE IF EXISTS sp_dropindex;
DELIMITER //
CREATE PROCEDURE sp_dropindex
(
IN databasename VARCHAR(50)
,
IN tablename VARCHAR(50) ,
IN indexname VARCHAR(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=tablename
AND INDEX_NAME=indexname;

IF cnt > 0 THEN
PREPARE 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是索引名称。

更多相关文章

  1. 0926MySQL中ICP索引下推
  2. mysql 操作索引FORCE INDEX
  3. InnoDB辅助索引页面的物理结构是什么样子的
  4. MySQL索引的基础初识
  5. 为获得快速结果,我的查询有什么好的索引?
  6. Mysql存储过程、索引
  7. mysql联合索引分析测试
  8. MySQL索引帮助-哪个更快?
  9. 高性能Mysql——创建高性能的索引

随机推荐

  1. Android EditText的inputType属性值
  2. 【Android 应用开发】Android资源文件 -
  3. Ubuntu 编译Android若干错误及解决方法(
  4. Android 开关控件Switch使用
  5. Android跨进程通信IPC之16——Binder之na
  6. Android OpenGL ES基础教程
  7. Android属性系统之build.prop的生成
  8. Eclipse 安装 Google Android 插件
  9. Android必备:Android应用程序组成
  10. Android项目架构2 - Clean Architecture