Определение существования индекса таблицы MySQL перед созданием

Процесс автоматической миграции базы данных нашей системы включает запуск сценариев .sql, содержащих новые определения таблиц и сопровождающие их индексы.

Мне требуется возможность создавать эти таблицы и индексы, только если они еще не существуют. О таблицах заботятся, используя IF NOT EXISTS, но при создании индексов такой синтаксис не существует.

Я попытался написать хранимую процедуру, показанную ниже, но, по-видимому, она не удалась, поскольку вы не можете выбирать из оператора show.

DELIMITER $$
DROP PROCEDURE IF EXISTS csi_add_index $$
CREATE PROCEDURE csi_add_index(in theTable varchar(128), in theIndexName varchar(128), in theIndexColumns varchar(128)  )
BEGIN
 IF(((SELECT COUNT(*) FROM (SHOW KEYS FROM theTable WHERE key_name = theIndexName)) tableInfo = 0) THEN
   SET @s = CONCAT('CREATE INDEX ' , theIndexName , ' ON ' , theTable, '(', theIndexColumns, ')');
   PREPARE stmt FROM @s;
   EXECUTE stmt;
 END IF;
END $$

Я подумал об удалении и воссоздании, но этот процесс, как он существует, предполагает, что он не встретит ошибок, поэтому я сначала хочу проверить существование.

Есть ли другой способ получить индексы таблицы, чтобы проверить, существует ли индекс до его создания, или кто-нибудь может предложить лучший подход к управлению этим?

РЕДАКТИРОВАТЬ: Обратите внимание, что это автоматизированная процедура, не человек вмешательство.

9
задан NeilInglis 2 September 2010 в 11:57
поделиться