Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/66.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql 将自动增量列定义为主键没有用吗_Mysql_Database - Fatal编程技术网

Mysql 将自动增量列定义为主键没有用吗

Mysql 将自动增量列定义为主键没有用吗,mysql,database,Mysql,Database,在php myadmin中,它表示将自动增量列定义为表的主键是没有用的。可以删除主键约束。(因为两者都做同样的工作) 这是真的吗。我应该删除主键约束吗 where子句使用主键列而不是自动递增列不是很好吗您可以创建一个自动递增的列,而不使用主键: 本声明是合法的: mysql> create table silly_but_possible ( id int auto_increment not null, xx varchar(9), key(id), pr

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

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


where子句使用主键列而不是自动递增列不是很好吗

您可以创建一个自动递增的列,而不使用主键:

本声明是合法的:

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)
因此,如果希望自动递增列成为主键,最好将其定义为主键。
请注意,表(目前)只能有一个自动递增列

如果不定义PK会发生什么?
如果您不这样做,MySQL将为您定义一个隐藏的自动递增PK。

但是,如果您已经有一个自动递增列,那么该列将始终有一个索引,并且因为只有一个自动递增列,MySQL(目前!)除了将该行提升到主键之外别无选择

您可以创建一个自动递增的列,而不必将其作为主键:

本声明是合法的:

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)
因此,如果希望自动递增列成为主键,最好将其定义为主键。
请注意,表(目前)只能有一个自动递增列

如果不定义PK会发生什么?
如果您不这样做,MySQL将为您定义一个隐藏的自动递增PK。

但是,如果您已经有一个自动递增列,那么该列将始终有一个索引,并且因为只有一个自动递增列,MySQL(目前!)除了将该行提升到主键之外别无选择

保持PK约束。这将使您免于一些麻烦:

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

保持PK约束。这将使您免于一些麻烦:

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

将列定义为自动增量时,它必须是键(主、唯一、索引)

举个例子

mysql>创建表测试

-> (id int(5) auto_increment,
-> name char(10)
-> );
错误1075(42000):表定义不正确;只能有一个自动列,必须将其定义为键

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


数据库管理器使用主索引高效地访问表行,并允许数据库管理器强制执行主键的唯一性

将列定义为自动增量时,它必须是键(主、唯一、索引)

举个例子

mysql>创建表测试

-> (id int(5) auto_increment,
-> name char(10)
-> );
错误1075(42000):表定义不正确;只能有一个自动列,必须将其定义为键

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


数据库管理器使用主索引高效地访问表行,并允许数据库管理器强制执行主键的唯一性

明确定义你的PK总是一个好主意。即使是多余的。如果它在这个版本的MySQL中,它可能不在更新的版本中。把PK条款留在那里,约翰就在这里。例如,你不知道DB软件将如何发展,当然你也无法预测DB何时需要为自动分析正确定义其所有元。明确定义PK总是一个好主意。即使是多余的。如果它在这个版本的MySQL中,它可能不在更新的版本中。把PK条款留在那里,约翰就在这里。你不知道数据库软件将如何发展,当然你也无法预测数据库何时需要为自动分析正确定义其所有元数据。例如,看看这个例子。看看这个例子。