Процесс автоматической миграции базы данных нашей системы включает запуск сценариев .sql, содержащих новые определения таблиц и сопровождающие их индексы.
Мне требуется возможность создавать эти таблицы и индексы, только если они еще не существуют.О таблицах заботятся, используя IF NOT EXISTS, но при создании индексов такой синтаксис не существует.
Я пытался написать хранимую процедуру, показанную ниже, но, по-видимому, это не удается, поскольку вы не можете выбрать изпоказать заявление.
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 $$
Я подумал об отбрасывании и воссоздании, но этот процесс, как он существует, предполагает, что он не встретит ошибок, поэтому я сначала хочу проверить существование.
Есть ли другой способ получить индексы таблицы, чтобы проверить, существует ли индекс до его создания, или кто-нибудь может предложить лучший подход к управлению этим?
РЕДАКТИРОВАТЬ: Обратите внимание, что этоавтоматизированная процедура, без вмешательства человека.