一尘不染

MySQL:#1075-错误的表格定义;自动增量与另一个键?

mysql

这是MySQL 5.3.X + db中的表:

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 ,
  UNIQUE (memberid),
  PRIMARY KEY (id) 
) ENGINE = MYISAM;

id 列从未在查询中使用,只是为了视觉方便(因此很容易看到表的增长方式)。 Memberid 是一个实际键,是唯一的,并且在查询中使用
memberid 来标识任何成员(WHERE memberid =’abcde’)。

我的问题是:如何保留auto_increment,但将memberid作为主键?那可能吗?当我尝试使用 PRIMARY KEY(memberid)
创建此表时,出现错误:

1075-错误的表格定义;只能有一个自动列,并且必须将其定义为键

如果性能非常重要(尽管磁盘空间不是很重要),那么最佳选择是什么(希望有一种方法可以保留id列,从而使性能良好,并且查询可以通过memberid而不是id来标识任何用户)?


阅读 298

收藏
2020-05-17

共1个答案

一尘不染

可以 拥有不是的自动递增列,PRIMARY KEY只要列上有索引(键)即可:

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;
2020-05-17