摘要:在本教程中,您将了解 MySQL INT
或整数数据类型以及如何在数据库表设计中使用它。此外,我们还将向您展示如何使用整数列的显示宽度和ZEROFILL属性。
MySQL INT
类型简介
在 MySQL 中, INT
代表整数,即整数。整数可以写成没有小数部分,例如 1、100、4、-10,并且不能是 1.2、5/3 等。整数可以是零、正数和负数。
MySQL 支持所有标准 SQL 整数类型INTEGER
或INT
和SMALLINT
。此外,MySQL 还提供TINYINT
MEDIUMINT
和BIGINT
作为 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
列时,该列将接受该值。此外,序列将重置为插入值的下一个值。
CREATE TABLE items (
item_id INT AUTO_INCREMENT PRIMARY KEY,
item_text VARCHAR(255)
);
Code language: SQL (Structured Query Language) (sql)
您可以在上面的CREATE TABLE
语句中使用INT
或INTEGER
,因为它们是可以互换的。每当向items
表中插入新行时, item_id
列的值就会增加 1。
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)

之后,插入一个新行,其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 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 1
Code 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)
v1
列的显示宽度为 2(包括ZEROFILL.
它的值为 1,因此您会在输出中看到01
。 MySQL 将第一个空格替换为 0。
v2 列显示 3 包括ZEROFILL
。它的值为 6,因此,您将00
视为前导零。
v3 列的显示宽度为ZEROFILL
为 5,而其值为 9,因此 MySQL 在输出中的数字开头填充0000
。
请注意,如果对整数列使用ZEROFILL
属性,MySQL 将自动向该列添加UNSIGNED
属性。
在本教程中,您学习了如何使用 MySQL INT
数据类型来设计数据库表。