Pau*_*aul 55 php mysql indexing
我想知道是否有一种方法可以在创建索引或在MySQL上销毁索引之前检查索引是否存在.几年前似乎有一个功能请求,但我找不到任何解决方案的文档.这需要在使用MDB2的PHP应用程序中完成.
Nik*_*l S 49
这是我的4班轮:
set @exist := (select count(*) from information_schema.statistics where table_name = 'table' and index_name = 'index' and table_schema = database());
set @sqlstmt := if( @exist > 0, 'select ''INFO: Index already exists.''', 'create index i_index on tablename ( columnname )');
PREPARE stmt FROM @sqlstmt;
EXECUTE stmt;
Run Code Online (Sandbox Code Playgroud)
Pab*_*ino 25
IF EXISTS修饰符不是为DROP INDEX或CREATE INDEX尚未构建的.但您可以在创建/删除索引之前手动检查是否存在.
使用此句来检查索引是否已存在.
SHOW INDEX FROM table_name WHERE KEY_NAME = 'index_name'
Run Code Online (Sandbox Code Playgroud)
Dat*_*eek 13
这是一个DROP INDEX IF EXISTS程序:
DELIMITER $$
DROP PROCEDURE IF EXISTS drop_index_if_exists $$
CREATE PROCEDURE drop_index_if_exists(in theTable varchar(128), in theIndexName varchar(128) )
BEGIN
IF((SELECT COUNT(*) AS index_exists FROM information_schema.statistics WHERE TABLE_SCHEMA = DATABASE() and table_name =
theTable AND index_name = theIndexName) > 0) THEN
SET @s = CONCAT('DROP INDEX ' , theIndexName , ' ON ' , theTable);
PREPARE stmt FROM @s;
EXECUTE stmt;
END IF;
END $$
DELIMITER ;
Run Code Online (Sandbox Code Playgroud)
此代码是基于此处的过程创建的:在创建之前确定MySQL表索引是否存在