MySQL CREATE生成冗余索引

时间:2014-12-26 13:27:16

标签: php mysql indexing

使用以下代码创建新数据库表时,phpMyAdmin会报告冗余索引,如this post中所述。有没有办法避免这种行为,并且只创建一个表创建一个索引?我可以用ALTER TABLE mytest DROP INDEX id;删除第二个索引,但也许有一个更优雅的解决方案?

<?php
  $sql = "CREATE TABLE IF NOT EXISTS `mytest` (
    `id` SERIAL PRIMARY KEY,
    `mytext` TEXT
  ) CHARSET=utf8";
  mysqli_query($mysqli, $sql);

  $sql = "SHOW INDEX FROM `mytest`";
  if ($res = mysqli_query($mysqli, $sql)) {
    while ($ds = mysqli_fetch_array($res)) {
      echo "<pre>";
      print_r($ds);
      echo "</pre>";
    }
  } else echo mysqli_error($mysqli);
?>

1 个答案:

答案 0 :(得分:3)

根据文件:

  

SERIALBIGINT UNSIGNED NOT NULL AUTO_INCREMENT UNIQUE的别名。

因此,您的声明是:

id BIGINT UNSIGNED NOT NULL AUTO_INCREMENT UNIQUE PRIMARY KEY

因此,您将获得UNIQUE的索引和PRIMARY KEY的索引。

简单的解决方案是不使用&#34;缩写&#34;并明确你想要的东西:

id BIGINT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY