首页  >  文章  >  数据库  >  MySQL中自增列可以不作为主键而存在吗?

MySQL中自增列可以不作为主键而存在吗?

Barbara Streisand
Barbara Streisand原创
2024-11-02 01:20:02832浏览

Can Auto-Increment Columns Exist Without Being the Primary Key in MySQL?

解决不正确的表定义错误:平衡自增和主键

该场景涉及一个 MySQL 表,其中 id 列作为可视化的自增字段方便,而 memberid 列充当实际的唯一键。但是,尝试使用 PRIMARY KEY (memberid) 定义表会导致错误 (1075),指出只能有一个自动列并且它必须是一个键。

解决错误:保留自动增量和唯一键

要解决此问题,可以有一个不是主键的自动递增列,前提是在其上定义了索引(键)。修改后的表定义如下:

<code class="sql">CREATE TABLE members (
  id int(11) UNSIGNED NOT NULL AUTO_INCREMENT,
  memberid VARCHAR(30) NOT NULL,
  `time` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
  firstname VARCHAR(50) NULL,
  lastname VARCHAR(50) NULL,
  PRIMARY KEY (memberid),
  KEY (id)                          # or: UNIQUE KEY (id)
) ENGINE = MYISAM;</code>

通过在id列上添加KEY或UNIQUE KEY索引,在memberid列成为主键的同时保持自增功能,从而可以基于memberid 值。

选择最佳方法:平衡性能和空间

最佳选择取决于性能和磁盘空间的相对重要性。如果性能至关重要,则维护自动递增 id 列并在 memberid 上使用索引可提供平衡:

  • 自动递增 id 提供高效的排序和范围查询。
  • memberid 上的索引可确保使用唯一的成员标识符进行快速查找。

但是,如果磁盘空间是一个重要问题,请考虑完全删除 id 列并依赖 memberid 列作为主键和 auto - 递增字段。这种方法牺牲了一些性能来提高空间利用率。最终,性能和空间之间的选择取决于应用的具体要求。

以上是MySQL中自增列可以不作为主键而存在吗?的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn