MySQL INT数据类型
简介:在本教程中,您将了解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数据类型可以签名和不签名。
下表说明了每种整数类型的特性,包括以字节为单位的存储,最小值和最大值。
Type | Storage | Minimum Value | Maximum Value |
---|---|---|---|
TINYINT | 1 | -128 | 127 |
0 | 255 | ||
SMALLINT | 2 | -32768 | 32767 |
0 | 65535 | ||
MEDIUMINT | 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属性。
当您在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数据类型来设计数据库表。