gpt4 book ai didi

mysql - 主键应该始终是无符号的?

转载 作者:IT老高 更新时间:2023-10-28 12:58:11 24 4
gpt4 key购买 nike

由于主键(标识符)不会低于 0,我猜它应该始终是无符号的?

最佳答案

TL/DR:是的,但几乎没关系。

自动增量总是增加,所以它永远不会使用负值。您不妨将其设为无符号,并获得两倍的值范围。

另一方面,如果您的表格使用 231 值,它可能也会在短时间内使用 232 值,因此具有两倍的值范围差别不大。无论如何,您都必须升级到 BIGINT。


MySQL 支持可选的 SERIAL 数据类型(大概是为了与 PostgreSQL 兼容,因为 SERIAL 不是标准的 ANSI SQL)。这种数据类型只是创建 BIGINT UNSIGNED 的简写。

去试试吧:

CREATE TABLE test.foo (foo_id SERIAL PRIMARY KEY);

SHOW CREATE TABLE test.foo;

CREATE TABLE `test`.`foo` (
`foo_id` bigint(20) unsigned NOT NULL AUTO_INCREMENT,
PRIMARY KEY (`foo_id`),
UNIQUE KEY `foo_id` (`foo_id`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1

无论您声明有符号整数还是无符号整数,您都会获得相同数量的不同值:INT 为 232INT 为 264 BIGINT。如果该数字是无符号的,您将获得从 0 到该最大值减一的值。如果数字是有符号的,您将获得从 -max/2max/2-1 的值。无论哪种方式,您都会获得相同的绝对数量的不同值。

但由于 AUTO_INCREMENT 默认从零开始,并沿正方向递增,因此使用正值比使用负值更方便。

但你得到 2 倍的正值并不重要。任何超过最大有符号整数值 231-1 的表都可能继续增长,因此您应该对这些表使用 BIGINT

你真的,真的,真的不太可能分配超过 263-1 个主键值,即使你删除所有行并重新加载它们一天很多次。

关于mysql - 主键应该始终是无符号的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2686813/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com