这是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来标识任何用户)?
您 可以 拥有不是的自动递增列,PRIMARY KEY只要列上有索引(键)即可:
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;