Skip to main content

通过示例解释MySQL INT数据类型

MySQL INT类型简介

在MySQL中,INT代表整数。整数可以不带分数成分写入,例如1、100、4、-10,也不能是1.2、5/3等。整数可以是零、正、负。

MySQL支持所有标准的SQL整数类型integer或INT和SMALLINT。此外,MySQL还提供TINYINT MEDIUMINT和BIGINT作为SQL标准的扩展。

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

MySQL INT数据类型示例

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

A) 使用MySQL INT作为一个列示例

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

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

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

首先,创建一个名为items的新表,其中一个整型列作为主键:

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

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

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

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

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

SELECT * FROM items;

MySQL INT AUTO_INCREMENT

然后,插入一个新行,该行的item_id列的值被显式指定。

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

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

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

最后,再次查询items表的数据以查看结果。

SELECT * FROM items;

MySQL INT AUTO_INCREMENT Example

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

B) 使用MySQL INT UNSIGNED示例

首先,创建一个名为classes的表,其列total_成员的数据类型为无符号整数:

CREATE TABLE classes (
class_id INT AUTO_INCREMENT,
name VARCHAR(255) NOT NULL,
total_member INT UNSIGNED,
PRIMARY KEY (class_id)
);

其次,在classes表中插入新行:

INSERT INTO classes(name, total_member)
VALUES('Weekend',100);

一切如期进行。

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

INSERT INTO classes(name, total_member)
VALUES('Fly',-50);

MySQL发布了以下错误:

Error Code: 1264. Out of range value for column 'total_member' at row 1

带有display width属性的MySQL INT

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

请务必注意,“显示宽度”属性不控制列可以存储的值范围。应用程序通常使用“显示宽度”属性来设置整数值的格式。MySQL包含display width属性作为返回结果集的元数据。

具有ZEROFILL属性的MySQL INT

除了display width属性外,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
);

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

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

第三,从zerofill_tests表中查询数据。

SELECT 
v1, v2, v3
FROM
zerofill_tests;

v2列有一个包含ZEROFILL的3个字符的显示。它的值是6,因此,您将00视为前导零。

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

请注意,如果对整型列使用ZEROFILL属性,MySQL将自动向该列添加一个无符号属性。

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