Mysql 如果我有一个唯一的INT字段,是否需要一个自动递增的主键ID?
我想在一个表中存储一个IP地址列表,以便稍后检查我的系统中是否已经使用了某些IPMysql 如果我有一个唯一的INT字段,是否需要一个自动递增的主键ID?,mysql,Mysql,我想在一个表中存储一个IP地址列表,以便稍后检查我的系统中是否已经使用了某些IP 我想以longip模式(signed int)存储ip。由于每个IP都是唯一的,我想知道是否需要一个primery键字段(id,带自动递增),或者是否可以(更好)将我的longip字段用作主键。如果将来必须使用该键将其与另一个表连接,则另一个表应包含所有数字,这浪费了很多空间 例如,您有一个“计算机”表 在该表中,您使用ip进行了计算。为了加入,你需要一把钥匙,对吗?因此,如果您通过密钥加入,您应该拥有计算机id和
我想以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时,可以 国家代码,这几乎是既定的——除非像南斯拉夫或苏联这样的国家崩溃,或者像两个德国那样的国家联合起来——但这已经足够罕见了)
- 你的自然钥匙必须是绝对的、积极的, 不允许有例外,唯一 (姓名、社会保险等) 数字等通常看起来是唯一的,但实际上并非如此)
- 您的自然关键点应与INT一样小,例如,不能明显大于INT 大小小于4字节(不要使用 VARCHAR(50)用于您的PK,以及 尤其是你的集群密钥 在SQL Server中!)
- 您的自然关键点应该是稳定的,例如永不更改(使用ISO时,可以 国家代码,这几乎是既定的——除非像南斯拉夫或苏联这样的国家崩溃,或者像两个德国那样的国家联合起来——但这已经足够罕见了)
因为你使用的是longip,正如你所指出的,它可能可以使用 几乎每次开始使用自然关键点时,您都会在以后后悔。事情会发生的,这是墨菲定律。省事了,只需添加ID列即可
如果您不喜欢自动递增,只需使用uuid即可。MySql有一个uuid函数来简化这一过程。几乎每次你开始使用一个自然键时,你都会在以后后悔。事情会发生的,这是墨菲定律。省事了,只需添加ID列即可 如果您不喜欢自动递增,只需使用uuid即可。MySql有一个uuid函数来简化这一过程