MySQL INT类型
一、MySQL INT类型 介绍
MySQL 中的 INT 是整数数据类型,是整数。它允许在没有小数部分(没有小数部分)的情况下写入数字。例如,1、5、-10 是整数类型,而 1.5、5/7 不能是整数。请注意,整数值可以是正数、负数或零。我们可以在各种算术运算中使用这种数据类型,例如加法 (+)、减法 (-)、除法 (/)、乘法 (*) 和模数 (%)。
一般来说,MySQL 支持所有的SQL名为 INTEGER 或 INT 和 SMALLINT 的标准整数类型。作为标准整数类型的扩展,它还提供了 TINYINT MEDIUMINT 和 BIGINT。MySQL中的INT数据类型可以是有符号的和无符号的。我们可以通过下表来理解它,该表说明了每种整数类型的特征,包括每种整数类型所需的存储和范围(最小值和最大值)。
类型 | 存储(字节) | 无符号的最小值 | 最小值无符号 | 有符号的最大值 | 最大值无符号 |
---|---|---|---|---|---|
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 INT类型 示例
让我们通过 MySQL 中的各种示例来了解如何使用整数数据类型。
1、MySQL INT用在列上面
我们通常将其用作表的主键,因为整数数据类型表示精确的数字。此外,我们可以使用此列指定 AUTO_INCREMENT 属性。
如果我们在 INT AUTO_INCREMENT 列中插入NULL或 0,则该列的值设置为以 1 开头的下一个序列值。并且,如果我们在 INT AUTO_INCREMENT 列中插入一个非空值,则该列接受该值并且它的序列被重置为插入值的下一个值。
让我们看一个实际的例子。首先,创建一个名为student的新表,其中一个整数列作为主键和自增属性:
mysql> CREATE TABLE student (
stud_roll_num INT AUTO_INCREMENT PRIMARY KEY,
stud_name VARCHAR(100),
branch VARCHAR(100)
);
在使用CREATE TABLE语句创建表时,我们可以使用 INT 或 INTEGER 数据类型
接下来,执行下面的 INSERT 语句,将三行插入到学生表中:
mysql> INSERT INTO
student (stud_name, branch)
VALUES
('Peter', 'Computer Science'),
('David', 'Civil Engineering'),
('Stephen', 'Aeronautical Engineering');
现在,我们需要执行 SELECT 语句从学生表中查询数据:
mysql> SELECT * FROM student;
输出结果为:
同样,插入一个新行,我们将在其中明确指定 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 语句再次查询学生表的数据,来看看结果。
2、MySQL INT UNSIGNED 示例
MySQL 中的无符号整数仅存储正数。如果我们尝试将负数存储在无符号整数中,则会出错。我们可以通过使用列total_students创建一个名为“branches”的新表来理解它,该表存储无符号整数数据类型。
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
MySQL 支持一个扩展,该扩展可选地允许我们指定显示宽度以及整数数据类型。显示宽度包含在类型的基本关键字后面的括号内。例如,INT (4) 指定显示宽度为四位的整数。
需要注意的是,此属性不控制可以存储在列中的值的范围。我们主要在应用程序中使用该属性来格式化整数值。MySQL 将其作为返回结果集的元数据包含在内。
例如,如果我们用 SMALLINT (3) 指定列,它的取值范围是 -32768 到 32767。超出范围的值使用超过三位的数字完整显示。
四、带有 ZEROFILL 属性的 MySQL INT
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 属性。
热门文章
优秀文章