MySQL INT数据类型

时间:2019-11-20 08:52:10  来源:igfitidea点击:

简介:在本教程中,您将了解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数据类型可以签名和不签名。
下表说明了每种整数类型的特性,包括以字节为单位的存储,最小值和最大值。

TypeStorageMinimum ValueMaximum Value
TINYINT1-128127
0255
SMALLINT2-3276832767
065535
MEDIUMINT3-83886088388607
016777215
INT4-21474836482147483647
04294967295
BIGINT8-92233720368547758089223372036854775807
018446744073709551615

MySQL INT数据类型示例

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

A)使用MySQL INT作为列示例

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

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

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

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

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

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

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

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

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

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');

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

SELECT * FROM items;

请注意,从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)
);

第二,在类表中插入新行:

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

具有显示宽度属性的MySQL INT

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

重要的是要注意,显示宽度属性不能控制该列可以存储的值范围。
应用程序通常使用display width属性来格式化整数值。
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
);

第二,在zerofill_tests表中插入新行。

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

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

SELECT 
    v1, v2, v3
FROM
    zerofill_tests;

v1列的显示宽度为2(包括零填充),因此其值为1,因此您在输出中看到01。
MySQL将第一个空格替换为0。

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

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

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

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