我们系统的自动数据库迁移过程涉及运行包含新表定义及其附带索引的.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 $$
Run Code Online (Sandbox Code Playgroud)
我已经考虑过删除和重新创建,但是这个过程,因为它存在,假设它不会遇到任何错误,因此我想首先检查存在.
是否有另一种方法来检索表的索引以检查在创建之前索引是否已存在,或者是否有人建议更好的方法来管理它?
编辑:请注意,这是一个自动程序,没有人为干预.
我想用IF EXISTS选项在mysql中删除索引,但没有发现任何使它起作用的东西。
DROP INDEX IF EXISTS index_name ON table_name;
Run Code Online (Sandbox Code Playgroud)
有人有提示吗?