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 数据类型

因为它们是可以互换的。由于我们在上述查询中使用了 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;  

输出结果为:

同样,插入一个新行,我们将在其中明确指定 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 属性。

热门文章

优秀文章