簡體   English   中英

如果表不存在則添加索引

[英]Add index to table if it does not exist

我想使用ALTER語法為表添加索引,但首先要檢查表中是否已經存在,如果不存在才添加索引。

 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添加到表中的代碼段是:

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'返回任何行。 如果結果集不為空,則索引已經存在。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM