首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >MySQL CREATE生成冗余索引

问MySQL CREATE生成冗余索引
EN

Stack Overflow用户
提问于 2014-12-26 21:27:16
回答 1查看 30关注 0票数 0

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

代码语言:javascript
复制
<?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);
?>
EN

回答 1

Stack Overflow用户

发布于 2014-12-26 21:33:39

根据文档:

SERIAL是BIGINT UNSIGNED NOT NULL AUTO_INCREMENT UNIQUE的别名。

因此,您的声明是:

代码语言:javascript
复制
id BIGINT UNSIGNED NOT NULL AUTO_INCREMENT UNIQUE PRIMARY KEY

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

简单的解决方案是不使用“缩写”,并且清楚地知道你想要什么:

代码语言:javascript
复制
id BIGINT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/27657798

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档