📅  最后修改于: 2020-11-19 02:15:39             🧑  作者: Mango
MySQL中的INT是整数数据类型,它是一个整数。它允许数字无小数部分(无小数部分)的形式写入。例如,1、5,-10是整数类型,而1.5、5 / 7不能是整数。注意,整数值可以为正,负或零。我们可以在各种算术运算中使用此数据类型,例如加法(+),减法(-),除法(/),乘法(*)和模(%)。
通常,MySQL支持所有名为INTEGER或INT和SMALLINT的SQL标准整数类型。除了扩展标准整数类型外,它还提供TINYINT MEDIUMINT和BIGINT。
MySQL中的INT数据类型可以是有符号的也可以是无符号的。下表说明了每种整数类型的特征,包括每种整数类型所需的存储空间和范围(最小值和最大值),我们可以理解它。
Type | Storage (Bytes) | Minimum Value Signed | Minimum Value Unsigned | Maximum Value Signed | Maximum Value Unsigned |
---|---|---|---|---|---|
TINIINT | 1 | -128 | 0 | 127 | 225 |
SMALLINT | 2 | -32768 | 0 | 32767 | 65535 |
MEDIUMINT | 3 | -8388608 | 0 | 8388607 | 16777215 |
INT | 4 | -2147483648 | 0 | 2147483647 | 4294967295 |
BIGINT | 8 | -9223372036854775808 | 0 | 9223372036854775807 | 18446744073709551615 |
我们将要使用的数据类型的选择取决于我们将要存储的数据类型。例如,TINYINT数据类型足以满足一个班级最多可容纳35人的学生人数。但是,如果需要在一个国家/地区存储每个人的联系电话,则必须选择INT或BIGINT数据类型。只要有可能,最好选择最小的数据类型,因为它可以最大程度地减小数据库的大小。
让我们了解如何使用MySQL中的各种示例来处理整数数据类型。
我们通常将其用作表的主键,因为整数数据类型表示精确数字。另外,我们可以在此列中指定AUTO_INCREMENT属性。
如果我们在INT AUTO_INCREMENT列中插入NULL或0,则该列的值将设置为以1开头的下一个序列值。并且,如果在INT AUTO_INCREMENT列中插入非null值,则该列将接受该值,并且其顺序将重置为插入值的下一个值。
让我们看一个实际的例子。首先,创建一个名为student的新表,该表具有一个整数列作为主键和自动递增属性:
mysql> CREATE TABLE student (
stud_roll_num INT AUTO_INCREMENT PRIMARY KEY,
stud_name VARCHAR(100),
branch VARCHAR(100)
);
使用CREATE TABLE语句创建表时,我们可以使用INT或INTEGER数据类型,因为它们是可互换的。由于我们在上述查询中使用了AUTO_INCREMENT属性,因此每当我们向学生表中插入新行时,stud_roll_num列的值就会增加1。
接下来,执行以下INSERT语句,该语句将在学生表中插入三行:
mysql> INSERT INTO
student (stud_name, branch)
VALUES
('Peter', 'Computer Science'),
('David', 'Civil Engineering'),
('Stephen', 'Aeronautical Engineering');
现在,我们需要执行SELECT语句以查询学生表中的数据:
mysql> SELECT * FROM student;
mysql> SELECT * FROM学生;
再次,插入新行,在此我们将显式指定stud_roll_num列的值:
mysql> INSERT INTO
student (stud_roll_num, stud_name, branch)
VALUES
(10, 'Gorge', 'Mechanical Engineering');
由于stud_roll_num列的当前值为10,因此下一个序列将重置为11。执行以下语句,在此我们将不指定stud_roll_num:
mysql> INSERT INTO
student (stud_name, branch)
VALUES
('John', 'Civil Engineering');
最后,使用SELECT语句再次查询学生表的数据以查看结果。
MySQL中的无符号整数仅存储正数。如果我们尝试将负数存储在无符号整数中,则会出现错误。我们可以通过创建一个名为“分支”的新表来了解它,该表具有total_students列,该表存储无符号整数数据类型。
CREATE TABLE branches (
branch_id INT AUTO_INCREMENT PRIMARY KEY,
branch_name VARCHAR(255) NOT NULL,
total_students INT UNSIGNED
);
接下来,我们需要使用以下语句将数据插入该表:
INSERT INTO branches (branch_name, total_students)
VALUES ('Computer Science', 150),
('Mechanical Engineering', 100);
上面的语句按预期工作,因为我们没有在total_students列中指定任何负数。请参见以下输出:
同样,我们将尝试在total_students列中存储一个负数:
INSERT INTO branches (branch_name, total_students)
VALUES ('Civil Engineering', -100);
在这种情况下,MySQL会产生以下错误:
MySQL支持扩展,可以选择允许我们指定显示宽度以及整数数据类型。显示宽度被包装在类型的基本关键字之后的括号内。例如,INT(4)指定显示宽度为四位数的整数。
重要的是要注意,此属性不能控制可以存储在列中的值的范围。我们主要在应用程序中使用此属性来格式化整数值。 MySQL将其包括为返回结果集的元数据。
例如,如果我们用SMALLINT(3)指定该列,则其值的范围是-32768到32767。超出范围的值将使用多于三位的数字完整显示。
MySQL提供了一个非标准的ZEROFILL属性,该属性可以与display width属性一起使用。在这种情况下,MySQL用零替换空格的填充。让我们借助一个示例来理解:
首先,我们将使用以下语句创建一个新的表,名为numeric_tests:
mysql> CREATE TABLE numeric_tests (
test_id INT AUTO_INCREMENT PRIMARY KEY,
val1 INT(2) ZEROFILL,
val2 INT(3) ZEROFILL,
val3 INT(5) ZEROFILL
);
接下来,我们将使用以下语句将数据插入表中:
mysql> INSERT INTO numeric_tests (val1,val2,val3)
VALUES(1,5,8);
现在,我们将使用SELECT语句查询表的数据:
mysql> SELECT * FROM numeric_tests;
我们将得到如下截图的结果:
在上面的输出中,我们可以看到val1列的显示宽度为2,包括ZEROFILL。在这里,我们插入了它的值1;因此,我们将在输出中看到01,MySQL将第一个空格替换为一个零(0)。
列val2的显示为3,包括ZEROFILL。在这里,我们插入了它的值5;因此,我们将在列中看到005,MySQL用两个零代替前导空格。
列val3的显示宽度为5,包括ZEROFILL,而我们将其值插入为8;因此,我们将在列中看到00008,并且MySQL在输出的数字开头用四个零(0000)替换前导空格。
注意:如果我们在整型列中使用ZEROFILL属性,MySQL将自动在该列中添加UNSIGNED属性。