MySQL INT Data Type

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

MySQL INT类型简介

在 MySQL 中, INT代表整数,即整数。整数可以写成没有小数部分,例如 1、100、4、-10,并且不能是 1.2、5/3 等。整数可以是零、正数和负数。

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

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

类型贮存最小值最大值
(字节) (签名/未签名) (签名/未签名)
天音1 -128 127
0 255
小智2 -32768 32767
0 65535
中薄荷3 -8388608 8388607
0 16777215
INT 4 -2147483648 2147483647
0 4294967295
BIGINT 8 -9223372036854775808 9223372036854775807
0 18446744073709551615

MySQL INT数据类型示例

让我们看一些使用整数数据类型的示例。

A) 使用 MySQL INT作为列示例

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

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

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

首先,创建一个名为items的新表,并以整数列作为主键

CREATE TABLE items (
    item_id INT AUTO_INCREMENT PRIMARY KEY,
    item_text VARCHAR(255)
);Code language: SQL (Structured Query Language) (sql)

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

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

INSERT INTO 
    items(item_text)
VALUES
    ('laptop'), 
    ('mouse'),
    ('headphone');Code language: SQL (Structured Query Language) (sql)

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

SELECT * FROM items;Code language: SQL (Structured Query Language) (sql)
MySQL INT 自动增量

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

INSERT INTO items(item_id,item_text)
VALUES(10,'Server');Code language: SQL (Structured Query Language) (sql)

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

INSERT INTO items(item_text)
VALUES('Router');Code language: SQL (Structured Query Language) (sql)

最后再次查询items表的数据即可看到结果。

SELECT * FROM items;Code language: SQL (Structured Query Language) (sql)
MySQL INT AUTO_INCRMENT 示例

请注意,从 MySQL 5.1 开始, AUTO_INCREMENT列仅接受正值,不允许负值。

B) 使用 MySQL INT UNSIGNED示例

首先,创建一个名为classes的表,其中的total_member列具有无符号整数数据类型:

CREATE TABLE classes (
    class_id INT AUTO_INCREMENT,
    name VARCHAR(255) NOT NULL,
    total_member INT UNSIGNED,
    PRIMARY KEY (class_id)
);
Code language: SQL (Structured Query Language) (sql)

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

INSERT INTO classes(name, total_member)
VALUES('Weekend',100);Code language: SQL (Structured Query Language) (sql)

它按预期工作。

第三,尝试将负值插入到total_member列中:

INSERT INTO classes(name, total_member)
VALUES('Fly',-50);
Code language: SQL (Structured Query Language) (sql)

MySQL 发出以下错误:

Error Code: 1264. Out of range value for column 'total_member' at row 1Code language: SQL (Structured Query Language) (sql)

MySQL INT显示宽度属性

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

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

具有ZEROFILL属性的 MySQL INT

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

首先,创建一个名为zerofill_tests的表:

CREATE TABLE zerofill_tests(
    id INT AUTO_INCREMENT PRIMARY KEY,
    v1 INT(2) ZEROFILL,
    v2 INT(3) ZEROFILL,
    v3 INT(5) ZEROFILL
);Code language: SQL (Structured Query Language) (sql)

其次,将新行插入到zerofill_tests表中。

INSERT INTO zerofill_tests(v1,v2,v3)
VALUES(1,6,9);Code language: SQL (Structured Query Language) (sql)

第三,从zerofill_tests表中查询数据

SELECT 
    v1, v2, v3
FROM
    zerofill_tests;Code language: SQL (Structured Query Language) (sql)

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

v2 列显示 3 包括ZEROFILL 。它的值为 6,因此,您将00视为前导零。

v3 列的显示宽度为ZEROFILL为 5,而其值为 9,因此 MySQL 在输出中的数字开头填充0000

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

在本教程中,您学习了如何使用 MySQL INT数据类型来设计数据库表。

本教程有帮助吗?