You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用PHP和MySQLi创建及删除MySQL表索引(以region列为例)

PHP+MySQLi 实现索引删除与重建代码

首先修正基础连接代码的笔误:原代码中连接返回的变量是$link,但设置字符集时误用了$con,已在实现代码中统一修正为一致的变量名。

完整实现代码

<?php
// 数据库连接配置,替换为你实际的配置值
define('db_host', '你的数据库地址');
define('db_user', '你的数据库用户名');
define('db_pass', '你的数据库密码');
define('db_pools', '你的数据库名');

// 建立连接
$link = mysqli_connect(db_host, db_user, db_pass, db_pools);
if (!$link) {
    die("数据库连接失败: " . mysqli_connect_error());
}
mysqli_set_charset($link, "utf8");

// 替换为你实际操作的新表名
$target_table = '替换为你的目标表名';

// --------------------------
// 第一步:删除表中所有原有索引
// --------------------------
// 查询所有索引,如需保留主键索引,可在WHERE条件中加 AND KEY_NAME != 'PRIMARY'
$index_query = "SELECT KEY_NAME FROM INFORMATION_SCHEMA.STATISTICS WHERE TABLE_SCHEMA = '".db_pools."' AND TABLE_NAME = '".$target_table."'";
$index_result = mysqli_query($link, $index_query);
if ($index_result) {
    $index_list = [];
    while ($row = mysqli_fetch_assoc($index_result)) {
        // 索引名去重,避免重复执行删除操作
        if (!in_array($row['KEY_NAME'], $index_list)) {
            $index_list[] = $row['KEY_NAME'];
        }
    }
    // 循环删除所有索引
    foreach ($index_list as $index_name) {
        $drop_sql = "DROP INDEX `{$index_name}` ON `{$target_table}`";
        if (!mysqli_query($link, $drop_sql)) {
            echo "删除索引{$index_name}失败: " . mysqli_error($link) . "<br>";
        } else {
            echo "删除索引{$index_name}成功<br>";
        }
    }
    mysqli_free_result($index_result);
} else {
    die("查询表索引失败: " . mysqli_error($link));
}

// --------------------------
// 此处插入你对新表的编辑操作逻辑
// --------------------------


// --------------------------
// 第二步:新建region列索引
// --------------------------
// 如需创建唯一索引,将语句改为CREATE UNIQUE INDEX即可
$add_index_sql = "CREATE INDEX idx_region ON `{$target_table}` (`region`)";
if (mysqli_query($link, $add_index_sql)) {
    echo "新建region列索引成功<br>";
} else {
    echo "新建region列索引失败: " . mysqli_error($link) . "<br>";
}

// 关闭数据库连接
mysqli_close($link);
?>

注意事项

  • 代码中$target_table变量需替换为你实际操作的新表名
  • 索引名idx_region可根据你的业务命名规则自定义,保证同表不重复即可
  • 如果region列存在重复值,不要创建唯一索引,避免执行报错
  • 操作大表前建议先备份表结构和数据,优先选择业务低峰期执行

内容的提问来源于stack exchange,提问作者NhlGreg

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.06 10:36:05