如果索引不存在,则将索引添加到 table
Add index to table if it does not exist
我想使用 ALTER
语法将索引添加到 table,但首先检查它是否已存在于 table 中,只有在存在时才添加索引不存在。
ALTER TABLE tableName ADD INDEX IX_Table_XYZ (column1);
有什么办法吗?
这样试试:
set @x := (select count(*) from information_schema.statistics where table_name = 'table' and index_name = 'IX_Table_XYZ' and table_schema = database());
set @sql := if( @x > 0, 'select ''Index exists.''', 'Alter Table TableName ADD Index IX_Table_XYZ (column1);');
PREPARE stmt FROM @sql;
EXECUTE stmt;
您可以使用此语法检查索引(按索引名称)是否存在
SELECT 1
FROM INFORMATION_SCHEMA.STATISTICS
WHERE TABLE_SCHEMA = 'yourschema' AND TABLE_NAME='yourtable' AND
INDEX_NAME='yourindex';
然后你可以运行它在一个存储过程中,比如
IF (SELECT 1
FROM INFORMATION_SCHEMA.STATISTICS
WHERE TABLE_SCHEMA = 'yourschema' AND TABLE_NAME='yourtable' AND
INDEX_NAME='yourindex') != 1 THEN
Alter Table TableName ADD Index IX_Table_XYZ (column1);
END IF;
根据@KayNelson 的回答,对我来说,在 MySQL 5.7.16 中,正确的方法是在 IF
条件下使用 IS NULL
而不是 !=1
。
因此,有条件地将 INDEX
添加到 table 的代码段是:
IF (SELECT 1
FROM `INFORMATION_SCHEMA`.`STATISTICS`
WHERE `TABLE_SCHEMA` = 'yourschema'
AND `TABLE_NAME` = 'yourtable'
AND `INDEX_NAME` = 'yourindex') IS NULL THEN
ALTER TABLE `yourtable` ADD INDEX `yourindex` (`column1` ASC);
END IF;
另一种可能性是检查 SHOW INDEX FROM yourTableName WHERE Key_name = 'yourTableIndexName'
returns 是否有任何行。如果结果集不为空,则索引已经存在。
我想使用 ALTER
语法将索引添加到 table,但首先检查它是否已存在于 table 中,只有在存在时才添加索引不存在。
ALTER TABLE tableName ADD INDEX IX_Table_XYZ (column1);
有什么办法吗?
这样试试:
set @x := (select count(*) from information_schema.statistics where table_name = 'table' and index_name = 'IX_Table_XYZ' and table_schema = database());
set @sql := if( @x > 0, 'select ''Index exists.''', 'Alter Table TableName ADD Index IX_Table_XYZ (column1);');
PREPARE stmt FROM @sql;
EXECUTE stmt;
您可以使用此语法检查索引(按索引名称)是否存在
SELECT 1
FROM INFORMATION_SCHEMA.STATISTICS
WHERE TABLE_SCHEMA = 'yourschema' AND TABLE_NAME='yourtable' AND
INDEX_NAME='yourindex';
然后你可以运行它在一个存储过程中,比如
IF (SELECT 1
FROM INFORMATION_SCHEMA.STATISTICS
WHERE TABLE_SCHEMA = 'yourschema' AND TABLE_NAME='yourtable' AND
INDEX_NAME='yourindex') != 1 THEN
Alter Table TableName ADD Index IX_Table_XYZ (column1);
END IF;
根据@KayNelson 的回答,对我来说,在 MySQL 5.7.16 中,正确的方法是在 IF
条件下使用 IS NULL
而不是 !=1
。
因此,有条件地将 INDEX
添加到 table 的代码段是:
IF (SELECT 1
FROM `INFORMATION_SCHEMA`.`STATISTICS`
WHERE `TABLE_SCHEMA` = 'yourschema'
AND `TABLE_NAME` = 'yourtable'
AND `INDEX_NAME` = 'yourindex') IS NULL THEN
ALTER TABLE `yourtable` ADD INDEX `yourindex` (`column1` ASC);
END IF;
另一种可能性是检查 SHOW INDEX FROM yourTableName WHERE Key_name = 'yourTableIndexName'
returns 是否有任何行。如果结果集不为空,则索引已经存在。