MySQL:#1075 - 表定义不正确; 自动增量与另一个关键?

Har*_*iec 27 mysql primary-key auto-increment mysql-error-1075

这是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;
Run Code Online (Sandbox Code Playgroud)

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

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

1075 - 表定义不正确; 只能有一个自动列,必须将其定义为键

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

ype*_*eᵀᴹ 50

只要上面有索引(键),您就可以拥有一个不是的自动递增列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; 
Run Code Online (Sandbox Code Playgroud)

  • @KanagaveluSugumar请参阅https://aws.amazon.com/rds/aurora/faqs/:*** Amazon Aurora无法使用MyISAM存储引擎等某些MySQL功能。***欢迎来到2018年,MyISAM已死;) (2认同)

Thi*_*ath 12

首先创建没有auto_increment的表,

CREATE TABLE `members`(
    `id` int(11) NOT NULL,
    `memberid` VARCHAR( 30 ) NOT NULL ,
    `Time` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP ,
    `firstname` VARCHAR( 50 ) NULL ,
    `lastname` VARCHAR( 50 ) NULL
    PRIMARY KEY (memberid) 
) ENGINE = MYISAM;
Run Code Online (Sandbox Code Playgroud)

将id设为索引后,

ALTER TABLE `members` ADD INDEX(`id`);
Run Code Online (Sandbox Code Playgroud)

将id设置为auto_increment后,

ALTER TABLE `members` CHANGE `id` `id` INT(11) NOT NULL AUTO_INCREMENT;
Run Code Online (Sandbox Code Playgroud)

要么

CREATE TABLE IF NOT EXISTS `members` (
    `id` int(11) NOT NULL,
    `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` (`id`)
) ENGINE=MYISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;
Run Code Online (Sandbox Code Playgroud)