首页 > 数据库 > mysql教程 > 如何在 MySQL 中同时使用自动增量列和不同的主键?

如何在 MySQL 中同时使用自动增量列和不同的主键?

Patricia Arquette
发布: 2024-11-03 08:57:29
原创
1023 人浏览过

How can I use both an auto-increment column and a different primary key in MySQL?

MySQL:自动增量和主键共存的挑战

MySQL 在尝试定义自动增量列和非自动增量列的主键时遇到了挑战自动增量列。默认情况下,MySQL规定只能有一个自增列,并且必须将其指定为主键。在尝试优化表性能和数据检索效率时,这可能会导致混乱。

案例研究:成员管理表

考虑以下示例:id 列标记为自动的成员表增量以便于可视化监控,而memberid列作为查询中成员标识的主键。目标是在建立 memberid 作为主键的同时保持自动增量功能。

遇到错误

尝试使用 PRIMARY KEY (memberid) 创建表会导致错误:

1075 - Incorrect table definition; there can be only one auto column and it must be defined as a key
登录后复制

潜在解决方案

尽管存在错误,但可以同时拥有自动增量列和不同的主键。这里有两种可行的方法:

1。为自增列建立索引

在id列上创建索引,以便根据id和memberid进行高效检索。修改后的表定义如下所示:

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`)
) ENGINE = MYISAM;
登录后复制

2.使自增列成为主键的一部分

重新定义表,将 id 列包含在主键组合中,使 id 和 memberid 成为主键标识的定义因素。修改后的定义变为:

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 (`id`, `memberid`)
) ENGINE = MYISAM;
登录后复制

通过实现其中一种方法,您可以平衡自动增量列的需求(以方便视觉)和使用自定义键(memberid)以实现高效的成员识别查询,而不影响表性能。

以上是如何在 MySQL 中同时使用自动增量列和不同的主键?的详细内容。更多信息请关注PHP中文网其他相关文章!

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板