gpt4 book ai didi

mysql - 创建前判断MySQL表索引是否存在

转载 作者:可可西里 更新时间:2023-11-01 06:27:26 25 4
gpt4 key购买 nike

我们系统的自动数据库迁移过程涉及运行包含新表定义及其随附索引的 .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 $$

我考虑过删除并重新创建,但是这个过程,因为它存在,假设它不会遇到任何错误,因此我想先检查是否存在。

是否有另一种方法来检索表的索引以在创建之前检查索引是否已经存在,或者有人可以建议更好的方法来管理它吗?

编辑:请注意,这是一个自动化过程,没有人为干预。

最佳答案

SELECT INDEX_NAME FROM INFORMATION_SCHEMA.STATISTICS WHERE
`TABLE_CATALOG` = 'def' AND `TABLE_SCHEMA` = DATABASE() AND
`TABLE_NAME` = theTable AND `INDEX_NAME` = theIndexName

关于mysql - 创建前判断MySQL表索引是否存在,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3626645/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com