Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/70.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 如果我有一个唯一的INT字段,是否需要一个自动递增的主键ID?_Mysql - Fatal编程技术网

Mysql 如果我有一个唯一的INT字段,是否需要一个自动递增的主键ID?

Mysql 如果我有一个唯一的INT字段,是否需要一个自动递增的主键ID?,mysql,Mysql,我想在一个表中存储一个IP地址列表,以便稍后检查我的系统中是否已经使用了某些IP 我想以longip模式(signed int)存储ip。由于每个IP都是唯一的,我想知道是否需要一个primery键字段(id,带自动递增),或者是否可以(更好)将我的longip字段用作主键。如果将来必须使用该键将其与另一个表连接,则另一个表应包含所有数字,这浪费了很多空间 例如,您有一个“计算机”表 在该表中,您使用ip进行了计算。为了加入,你需要一把钥匙,对吗?因此,如果您通过密钥加入,您应该拥有计算机id和

我想在一个表中存储一个IP地址列表,以便稍后检查我的系统中是否已经使用了某些IP


我想以longip模式(signed int)存储ip。由于每个IP都是唯一的,我想知道是否需要一个primery键字段(id,带自动递增),或者是否可以(更好)将我的longip字段用作主键。

如果将来必须使用该键将其与另一个表连接,则另一个表应包含所有数字,这浪费了很多空间

例如,您有一个“计算机”表

在该表中,您使用ip进行了计算。为了加入,你需要一把钥匙,对吗?因此,如果您通过密钥加入,您应该拥有计算机id和密钥(在本例中为ip)


我强烈建议使用一个更简单的id和autoincrement,就像大型机(as400)、iSeries等之后所做的那样。

如果将来必须使用键将其与另一个表连接,那么另一个表应该包含所有数字,这会浪费大量空间

例如,您有一个“计算机”表

在该表中,您使用ip进行了计算。为了加入,你需要一把钥匙,对吗?因此,如果您通过密钥加入,您应该拥有计算机id和密钥(在本例中为ip)

我强烈建议在自动增量中使用更简单的id,就像大型机(as400)、iSeries等之后一样。

我认为Marc_s的问题可以指导我们

我要说的是,必须遵守以下标准 满足:

  • 你的自然钥匙必须是绝对的、积极的, 不允许有例外,唯一 (姓名、社会保险等) 数字等通常看起来是唯一的,但实际上并非如此)

  • 您的自然关键点应与INT一样小,例如,不能明显大于INT 大小小于4字节(不要使用 VARCHAR(50)用于您的PK,以及 尤其是你的集群密钥 在SQL Server中!)

  • 您的自然关键点应该是稳定的,例如永不更改(使用ISO时,可以 国家代码,这几乎是既定的——除非像南斯拉夫或苏联这样的国家崩溃,或者像两个德国那样的国家联合起来——但这已经足够罕见了)

如果满足这些条件,您可以 考虑一个自然键作为你的PK 但这应该是2%的例外 你所有的桌子-不是标准的

所以我想说,您可能应该使用代理主键。如果愿意,您可以始终将IP用作唯一密钥

因为你使用的是longip,正如你所指出的,它可能可以使用

我认为Marc_的问题可以指导我们

我要说的是,必须遵守以下标准 满足:

  • 你的自然钥匙必须是绝对的、积极的, 不允许有例外,唯一 (姓名、社会保险等) 数字等通常看起来是唯一的,但实际上并非如此)

  • 您的自然关键点应与INT一样小,例如,不能明显大于INT 大小小于4字节(不要使用 VARCHAR(50)用于您的PK,以及 尤其是你的集群密钥 在SQL Server中!)

  • 您的自然关键点应该是稳定的,例如永不更改(使用ISO时,可以 国家代码,这几乎是既定的——除非像南斯拉夫或苏联这样的国家崩溃,或者像两个德国那样的国家联合起来——但这已经足够罕见了)

如果满足这些条件,您可以 考虑一个自然键作为你的PK 但这应该是2%的例外 你所有的桌子-不是标准的

所以我想说,您可能应该使用代理主键。如果愿意,您可以始终将IP用作唯一密钥


因为你使用的是longip,正如你所指出的,它可能可以使用

几乎每次开始使用自然关键点时,您都会在以后后悔。事情会发生的,这是墨菲定律。省事了,只需添加ID列即可


如果您不喜欢自动递增,只需使用uuid即可。MySql有一个uuid函数来简化这一过程。

几乎每次你开始使用一个自然键时,你都会在以后后悔。事情会发生的,这是墨菲定律。省事了,只需添加ID列即可

如果您不喜欢自动递增,只需使用uuid即可。MySql有一个uuid函数来简化这一过程