MySQL INT数据类型

2024年10月22日 MySQL INT数据类型 极客笔记

MySQL INT数据类型

在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

我们将要使用的数据类型取决于我们要存储的数据类型。例如,对于最多35人的班级中的学生人数,TINYINT数据类型已足够。然而,如果我们需要存储一个国家的每个人的联系电话,我们必须选择INT或BIGINT数据类型。 尽可能选择最小的数据类型是理想的,因为它可以最小化数据库的大小

MySQL INT数据类型示例

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

1. 用于列的MySQL INT

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

如果我们插入 NULL 或0到INT AUTO_INCREMENT列中,则该列的值设置为从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属性,每当我们向student表插入新行时,stud_roll_num列的值都会增加1。

接下来,执行以下INSERT语句,将三行数据插入到student表中:

mysql> INSERT INTO 
    student (stud_name, branch)
VALUES
    ('Peter', 'Computer Science'),
    ('David', 'Civil Engineering'),
    ('Stephen', 'Aeronautical Engineering');

现在,我们需要执行SELECT语句来从学生表中查询数据:

mysql> SELECT * FROM student;

mysql> 从学生中选择*;

再次,在我们可以 显式指定 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中的无符号整数仅存储正数。如果我们尝试在无符号整数中存储负数,会产生错误。我们可以通过创建一个名为 “branches” 的新表来进行理解,该表具有存储无符号整数数据类型的列 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 with the Display Width Attribute

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

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

例如,如果我们指定了带有SMALLINT (3)的列,它的值范围为-32768到32767。超出范围的值将使用超过三位数字来完全显示。

MySQL INT with the ZEROFILL Attribute

MySQL提供了一个非标准的ZEROFILL属性,可以与显示宽度属性一起使用。在这种情况下,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属性到该列。

本文链接:http://so.lmcjl.com/news/15988/

展开阅读全文