MySQL INT

17 Mar 2025 | 5 分钟阅读

MySQL 中的 INT 是一种**整数数据类型**,它是一个整数。**它允许数字不带小数部分(没有小数)**。例如,1、5、-10 是整数类型,而 1.5、5/7 不能是整数。值得注意的是,整数值可以是**正数、负数或零**。我们可以将此数据类型用于各种算术运算,例如加法 (+)、减法 (-)、除法 (/)、乘法 (*) 和模 (%)。

通常,MySQL 支持所有 SQL 标准整数类型,名为 INTEGER 或 INT 和 SMALLINT。除了标准整数类型外,它还提供 TINYINT、MEDIUMINT 和 BIGINT。

MySQL 中的 INT 数据类型可以是**有符号**和**无符号**的。我们可以通过下表来理解它,该表说明了每种整数类型的特性,包括所需存储空间和每种整数类型的范围(最小值和最大值)。

类型存储空间(字节)有符号最小值无符号最小值有符号最大值无符号最大值
TINYINT1-1280127225
SMALLINT2-3276803276765535
MEDIUMINT3-83886080838860716777215
INT4-2147483648021474836474294967295
BIGINT8-92233720368547758080922337203685477580718446744073709551615

我们选择使用的数据类型取决于我们要存储的数据类型。例如,TINYINT 数据类型足以存储一个班级中最多 35 人的学生人数。但是,如果我们需要存储一个国家/地区所有人的联系电话,我们必须选择 INT 或 BIGINT 数据类型。**在可能的情况下,理想是选择最小的数据类型,因为它会使数据库的大小最小化**。

MySQL INT 数据类型示例

让我们通过 MySQL 中的各种示例来了解如何使用整数数据类型。

1. MySQL 中列的 INT

我们通常将其用作表的主键,因为整数数据类型表示精确的数字。此外,我们可以为该列指定 AUTO_INCREMENT 属性。

如果我们将 **NULL** 或 0 插入到 INT AUTO_INCREMENT 列中,则该列的值将设置为从 1 开始的下一个序列值。并且,如果我们将非空值插入到 INT AUTO_INCREMENT 列中,则该列接受该值,其序列将重置为插入值的下一个值。

让我们看一个实际的例子。首先,创建一个名为 **student** 的新表,其中包含一个整数列作为主键和自增属性

在通过 **CREATE TABLE** 语句创建表时,我们可以使用 INT 或 INTEGER 数据类型,因为它们是可互换的。由于我们在上面的查询中使用了 AUTO_INCREMENT 属性,因此每当我们向 student 表中插入新行时,**stud_roll_num** 列的值将增加 1。

接下来,执行下面的 INSERT 语句,该语句将向 student 表中插入三行

现在,我们需要执行 SELECT 语句来查询 student 表中的数据

mysql> SELECT * FROM student;

MySQL INT

再次插入新行,其中我们将**显式指定 stud_roll_num 列的值**:

由于 stud_roll_num 列的当前值为 10,因此下一个序列将重置为 11。执行下面的语句,其中我们不指定 stud_roll_num

最后,再次使用 SELECT 语句查询 student 表的数据以查看结果。

MySQL INT

2. MySQL INT UNSIGNED 示例

MySQL 中的无符号整数仅存储正数。如果我们尝试在无符号整数中存储负数,它会产生错误。我们可以通过创建一个名为 **"branches"** 的新表来理解它,其中包含列 **total_students**,该列存储无符号整数数据类型。

接下来,我们需要使用以下语句将数据插入到此表中

上面的语句按预期工作,因为我们没有在 total_students 列中指定任何负数。请参阅下面的输出

MySQL INT

再次,我们将尝试在 total_students 列中存储负数

在这种情况下,MySQL 产生以下错误

MySQL INT

带显示宽度属性的 MySQL INT

MySQL 支持一个扩展,它允许我们有选择地指定显示宽度以及整数数据类型。显示宽度用括号括起来,跟在类型的基础关键字后面。**例如**,INT (4) 指定一个显示宽度为四位数字的整数。

重要的是要注意,此属性不控制可以存储在列中的值范围。我们主要在应用程序中使用此属性来格式化整数值。MySQL 将其作为返回结果集的元数据包含在内。

例如,如果我们将列指定为 SMALLINT (3),它的值范围是 -32768 到 32767。超出范围的值将通过使用三个以上的数字完整显示。

带 ZEROFILL 属性的 MySQL INT

MySQL 提供了一个非标准的 ZEROFILL 属性,可以与显示宽度属性结合使用。在这种情况下,MySQL 会用零替换空格填充。让我们通过一个示例来理解

首先,我们将使用以下语句创建一个名为 numeric_tests 的新表

接下来,我们将使用以下语句将数据插入到表中

现在,我们将使用 SELECT 语句查询表的数据

我们将得到如下截图所示的结果

MySQL INT

在上面的输出中,我们可以看到列 val1 的显示宽度为 2,包括 ZEROFILL。这里,我们插入了它的值 1;因此,我们将在输出中看到 01,MySQL 用一个零 (0) 替换第一个空格。

列 **val2** 的显示宽度为 3,包括 ZEROFILL。这里,我们插入了它的值 5;因此,我们将在列中看到 005,MySQL 用两个零替换前导空格。

列 **val3** 的显示宽度为 5,包括 ZEROFILL,而我们插入的值为 8;因此,我们将在列中看到 00008,MySQL 在输出中用四个零 (0000) 替换数字开头的前导空格。

注意:如果我们对整数列使用 ZEROFILL 属性,MySQL 将自动为该列添加 UNSIGNED 属性。


下一主题MySQL 今天