该场景涉及一个 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 列作为主键和 auto - 递增字段。这种方法牺牲了一些性能来提高空间利用率。最终,性能和空间之间的选择取决于应用的具体要求。
以上是MySQL中自增列可以不作为主键而存在吗?的详细内容。更多信息请关注PHP中文网其他相关文章!