13.1 INT

在本教程中,您将了解MySQL INT或整数数据类型以及如何在数据库表设计中使用它。 另外,我们将向您展示如何使用表中整数列的显示宽度和ZEROFILL属性。

MySQL INT类型简介

在MySQL中,INT代表整数。整数可以写成没有分数的数值,例如,它可以是11004-10等,它不能是1.25/3等。整数可以是零,正和负。

MySQL支持所有标准SQL整数类型INTEGERINTSMALLINT。 此外,MySQL提供TINYINTMEDIUMINTBIGINT作为标准SQL的扩展。

MySQL INT数据类型可以是有符号或无符号。下表说明了每个整数类型的特性,包括以字节为单位的存储,最小值和最大值。

在列中使用INT

由于整数类型表示精确数字,因此通常将其用作表的主键。此外,INT列可以具有AUTO_INCREMENT属性。

当在INT AUTO_INCREMENT列中插入NULL值或0时,列的值将设置为下一个序列值。 请注意,序列值以1开始。

AUTO_INCREMENT列中插入不为NULL或零的值时,列接受该值。 此外,序列将重置为插入值的下一个值。

我们来看一个使用带有AUTO_INCREMENT属性的整数列的表的例子。

首先,使用以下语句创建一个名为items的新表,其中整数列为主键:

USE testdb;

CREATE TABLE items (
    item_id INT AUTO_INCREMENT PRIMARY KEY,
    item_text VARCHAR(255)
);

可以在上面的CREATE TABLE语句中使用INTINTEGER,因为它们是可互换的。 每当在items表中插入一个新行时,item_id列的值将增加1

接下来,以下INSERT语句items表中插入三行数据。

INSERT INTO items(item_text)
VALUES('laptop'), ('mouse'),('headphone');

然后,使用以下SELECT语句items表查询数据:

SELECT 
    *
FROM
    items;

之后,插入一个新的行,该行的item_id列的值要明确指定。

INSERT INTO items(item_id,item_text)
VALUES(10,'Server');

因为item_id列的当前值为10,所以序列将重置为11。如果插入新行,则AUTO_INCREMENT列将使用11作为下一个值。

INSERT INTO items(item_text)
VALUES('Router');

最后,再次查询items表中的数据,如下结果。

SELECT 
    *
FROM
    items;

请注意,由于自MySQL 5.1版本起,AUTO_INCREMENT列只接受正值。AUTO_INCREMENT列不支持负数值。

MySQL INT和显示宽度属性

MySQL提供了一个扩展,允许您指定显示宽度以及INT数据类型。显示宽度包含在INT关键字后面的括号内,例如,INT(5)指定一个显示宽度为五位数的INT

要注意的是,显示宽度属性不能控制列可以存储的值范围。显示宽度属性通常由应用程序用于格式化整数值。 MySQL将显示宽度属性作为返回结果集的元数据。

具有ZEROFILL属性的MySQL INT

除了显示宽度之外,MySQL还提供了非标准的ZEROFILL属性。 在这种情况下,MySQL将空格替换为零。请参考以下示例。

首先,使用以下语句创建一个名为zerofill_tests的表:

USE testdb;

CREATE TABLE zerofill_tests(
    id INT AUTO_INCREMENT PRIMARY KEY,
    v1 INT(2) ZEROFILL,
    v2 INT(3) ZEROFILL,
    v3 INT(5) ZEROFILL
);

其次,在zerofill_tests表中插入一个新行。

INSERT into zerofill_tests(v1,v2,v3)
VALUES(1,6,9);

第三,从zerofill_tests查询数据

SELECT 
    v1, v2, v3
FROM
    zerofill_tests;

v1列的显示宽度为2,包括ZEROFILL,它的值为1,因此在输出中看到01。 MySQL将第一个空格替换为0

v2列具有包含ZEROFILL的显示宽度3。 它的值为6,因此将看到有00作为前导零。

v3列具有包含ZEROFILL的显示宽度5,它的值为9,因此MySQL在输出数字的开头填零为0000

请注意,如果对整数列使用ZEROFILL属性,MySQL将自动将一个UNSIGNED属性添加到该列。

在本教程中,我们向您展示了如何在表中使用MySQL INT数据类型,并向您介绍了整数列的显示宽度和ZEROFILL属性。

Last updated