什么是自动增量主键字段的完美数据类型?

问题描述:

我不是很喜欢数据库。我正在研究MySQL。什么是自动增量主键字段的完美数据类型?

我有以下疑问:什么是数据的一个表的自动增量键值最有型?它是一个无符号整数或BigInter还是其他?

什么是最好的选择吗?

有多少行,你希望你的表有哪些?对于只有几千行的表,没有bigint列。同样的道理,也是没有意义的int列,除非您希望自动增量包含负值,不过某种程度上(虽然公平,但默认情况下int-types都是带符号的,除非在列创建处另有明确定义) 。

Read the documentation,然后选择最适合您的预期值范围类型:

ColumnType | Max Value (signed/unsigned) 

    TINYINT | 127/255 
SMALLINT | 32767/65535 
MEDIUMINT | 8388607/16777215 
    INT  | 2147483647/4294967295 
    BIGINT  | 9223372036854775807/18446744073709551615 

你并不需要一个签署int类型,因为自动增量从零开始,不使用负值(如据我所知)。在AUTO_INCREMENT状态

+1

小修正。在MySQL中,自动递增从正常开始并以1递增(尽管它可以在列定义中更改);如果你手动输入一个零,一些修复过程会为你“修正”它(所以不要使用0作为“默认”行)。 – Uueerdo

文档如下:

Use the smallest integer data type for the AUTO_INCREMENT column that is large enough to hold the maximum sequence value you will need. When the column reaches the upper limit of the data type, the next attempt to generate a sequence number fails. Use the UNSIGNED attribute if possible to allow a greater range. For example, if you use TINYINT, the maximum permissible sequence number is 127. For TINYINT UNSIGNED, the maximum is 255.

因此,根据您所期望的记录数选择数据类型,并注意导致溢出的增量被视为错误。

此外,使用unsigned数据类型。 AUTO_INCREMENT实际上不能使用负数;你可以像一个语句设置的AUTO_INCREMENT的初始值,例如,alter table mytable auto_increment = 100;但如alter table mytable auto_increment = -100,这将是必要的,让计数器开始一个负数,会产生一个错误:

You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '-50' at line 1