将自动增量列定义为主键是没有用的

时间:2011-10-03 10:43:34

标签: mysql database

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

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

为where子句而不是自动增量列

创建主键列是不合适的

3 个答案:

答案 0 :(得分:1)

可以创建一个auto_incrementing 列,而不用它是主键:

此声明是合法的:

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列成为PK,你最好定义它。
请注意,表(目前)只能有一个auto_incrementing列。

如果您没有定义PK,会发生什么?
如果你不这样做,MySQL会为你定义一个隐藏的auto_incrementing PK 但是,如果您已经有一个auto_increment列,那么该列将始终具有索引,并且因为只有一个auto_incrementing列,MySQL(目前!)除了将该行提升为主键之外别无选择。

答案 1 :(得分:1)

保持PK约束。这样可以避免一些麻烦:

  • 如果您打算使用一些检查此约束的框架来确定哪些列用作PK。如果不存在约束,它们将丢失或需要其他配置。
  • 当您使用数据库设计软件时,如果您的数据库设计得当,它会更好。
  • 当您必须更改数据库软件(升级或更改品牌)时,您将很乐意在SQL语句中正确定义所有约束。

答案 2 :(得分:1)

当你将列定义为auto_increment时,它必须是key(primary,unique,index)。

举个例子

的MySQL>创建表测试

-> (id int(5) auto_increment,
-> name char(10)
-> );

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

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

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