我们系统的自动数据库迁移过程涉及运行包含新表定义及其附带索引的.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 $$
我考虑过删除并重新创建,但该过程,因为它存在,假设它不会遇到错误,因此我想首先检查是否存在。
是否有另一种方法来检索表的索引,以在创建之前检查索引是否已存在,或者有人可以建议更好的方法来管理它吗?
编辑:请注意,这是一个自动化过程,无需人工干预。
SELECT INDEX_NAME FROM INFORMATION_SCHEMA.STATISTICS WHERE
`TABLE_CATALOG` = 'def' AND `TABLE_SCHEMA` = DATABASE() AND
`TABLE_NAME` = theTable AND `INDEX_NAME` = theIndexName
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)