首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >将自动增量列定义为主键是否没有用处

问将自动增量列定义为主键是否没有用处
EN

Stack Overflow用户
提问于 2011-10-03 18:43:34
回答 3查看 243关注 0票数 0

在php myadmin中,它表示在将自动增量列定义为表的主键时没有任何用处。您可以删除主键约束。(因为两者都做同样的工作,比如)。

这是真的吗。我应该删除主键约束吗?

where子句有一个主键列而不是自动增量列不是很好吗

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2011-10-03 18:51:42

保持PK约束。它会帮你省去一些麻烦:

如果您打算使用一些框架来检查此约束以确定哪些列用作PK,请使用

  • 。如果不存在约束,它们将丢失或需要额外配置。
  • 当您使用数据库设计软件时,如果您的数据库设计正确,它将工作得更好。
  • 当您必须更改数据库软件(升级或更改品牌)时,您将很高兴在您的SQL语句中正确地定义了所有约束。
票数 1
EN

Stack Overflow用户

发布于 2011-10-03 18:50:43

你可以创建一个auto_incrementing 的列,而不用它作为主键:

这句话是合法的:

代码语言:javascript
复制
mysql> create table silly_but_possible (
    id int auto_increment not null,
    xx varchar(9),
    key(id),
    primary key (xx));
Query OK, 0 rows affected (0.15 sec)

所以如果你想让你的auto_incrementing列成为主键,你最好这样定义它。

请注意,一个表(目前)只能有一个auto_incrementing列。

如果不定义PK,会发生什么?

如果您不这样做,MySQL将为您定义一个隐藏的auto_incrementing PK。

但是,如果您已经有一个auto_increment列,那么该列将始终有一个索引,而且因为只能有一个auto_incrementing列MySQL (目前!)除了将该行提升为主键之外别无选择。

票数 1
EN

Stack Overflow用户

发布于 2011-10-03 19:37:06

将列定义为auto_increment时,它必须是键(主键、唯一键、索引键)。

举个例子

mysql>创建表测试

代码语言:javascript
复制
-> (id int(5) auto_increment,
-> name char(10)
-> );

错误1075 (42000):表定义不正确;只能有一个auto列,并且必须将其定义为键

因此,当我们将列定义为auto_increment时,它应该是key.So,最好将该列定义为PK。

主索引由数据库管理器用于有效地访问表行,并允许数据库管理器强制主键的唯一性。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/7633947

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档