Mysql 简明教程

MySQL - INT

The MySQL INT Data Type

MySQL INT 数据类型用来存储没有小数位(整数)的整数。

然而,MySQL 提供了不同的整数数据类型,如 TINYINT、SMALLINT、MEDIUMINT 和 BIGINT,以满足不同范围的整数。

以下表格说明了 MySQL 中不同整数类型在字节、最小值和最大值(带符号和不带符号选项)方面的特征 −

Type

Storage (Bytes)

Minimum value (Signed/Unsigned)

Maximum value (Signed/Unsigned)

TINYINT

1

-128/ 0

127/ 255

SMALLINT

2

-32768/ 0

32767/ 65535

MEDIUMINT

3

-8388608/ 0

8388607/ 16777215

INT

4

-8388607/ 16777215

2147483647/ 4294967295

BIGINT

8

- 9223372036854775808 / 0

9223372036854775807 / 18446744073709551615

我们必须根据要存储的数据类型(类型)选择数据类型。如果可能,我们需要使用较小的数据类型以减小数据库大小。TINYINT 可用于小数,而 INT 或 BIGINT 用于大数,例如一个国家中的电话号码。

Auto Increment with MySQL INT

在 MySQL 中,你可以将 AUTO_INCREMENT 特性与 INT 列一起使用,为该列自动生成唯一值。以下是它的工作原理 −

  1. Initial Value − 当你创建一个带有 AUTO_INCREMENT INT 列的表时,序列从 1 开始。

  2. Inserting NULL or 0 − 当你为 AUTO_INCREMENT 列插入一个 NULL 或 0 值时,MySQL 将该值设为下一个序列值。这意味着它从 1 开始分配下一个可用的整数。

  3. Inserting Non-NULL Values − 如果你在 AUTO_INCREMENT 列中插入一个非 NULL 值,MySQL 接受该值并根据插入的新值延续序列。

Example

首先,我们使用名为 "ID" 的 AUTO_INCREMENT INT 列创建一个名为 STUDENTS 的表 −

CREATE TABLE STUDENTS (
   ID int auto_increment,
   NAME varchar(20),
   primary key (ID)
);

当我们在该表中插入记录且不指定 "ID" 列的值时,MySQL 自动为 "ID" 生成从 1 开始的唯一值。

在此,我们使用如下 INSERT 查询在 STUDENTS 表中插入三行 −

INSERT INTO STUDENTS (NAME) VALUES
('Tilak'), ('Akash'), ('Surya'), ('Deepak');

创建的 STUDENTS 表如下 −

现在,让我们插入一行,我们为 "ID" 列提供一个明确的值 −

INSERT INTO STUDENTS (ID, NAME) VALUES (15, 'Arjun');

以下是所获得的输出 −

Query OK, 1 row affected (0.01 sec)

由于我们指定 "ID" 为 15,因此 MySQL 将该序列重置为 16。如果我们在不指定 "ID" 的情况下插入新行,MySQL 会使用 16 作为下一个 AUTO_INCREMENT 值 −

INSERT INTO STUDENTS (NAME) VALUES ('Dev');

获得的输出如下 −

Query OK, 1 row affected (0.01 sec)

现在,让我们从 "STUDENTS" 表中检索记录 −

SELECT * FROM STUDENTS;

生成的表为 −

MySQL INT UNSIGNED

在 MySQL 中,当你针对列定义一个 UNSIGNED INT 时,该列仅限存储非负值(即正值)。在这些列中不允许负值。

Example

让我们使用以下查询创建一个名为 EMPLOYEES 的表 −

CREATE TABLE EMPLOYEES (
   ID int auto_increment,
   NAME varchar(30) not null,
   AGE int UNSIGNED,
   Primary key(ID)
);

以下是所获得的输出 −

Query OK, 0 rows affected (0.04 sec)

现在,让我们向“AGE”列中插入一个非负值——

INSERT INTO EMPLOYEES (NAME, AGE) VALUES ('Varun', 32);

上面的查询将顺利执行,因为为“AGE”列提供的值是非负的。

Query OK, 1 row affected (0.01 sec)

但是,如果我们尝试向“AGE”列中插入一个负值,MySQL 将会生成一个错误——

INSERT INTO EMPLOYEES (NAME, AGE) VALUES ('Sunil', -10);

MySQL 将发出如下所示的错误——

ERROR 1264 (22003): Out of range value for column 'AGE' at row 1

MySQL INT with Display Width Attribute

在 MySQL 中,您可以通过在 INT 关键字后面使用圆括号来指定 INT 数据类型的显示宽度。例如,使用 INT(5) 将显示宽度设置为五位数字。

需要注意的是,MySQL 中 INT 的显示宽度属性不会影响列中可以存储的值的范围。它会格式化应用程序中的整数值,并作为元数据包含在结果集中。

例如,如果您在 EMPLOYEES 表的 id 列中插入值 12345,它将按原样存储。当您检索它时,一些应用程序可能会选择用前导零填充它,以确保它以五位数字显示(例如,012345)。

MySQL INT with ZEROFILL Attribute

在 MySQL 中,ZEROFILL 属性是一个非标准属性,可以应用于数字数据类型。它会向显示值添加前导零,确保数字以固定的宽度显示,这对于数字代码特别有用。

Example

让我们创建一个名为 ZEROFILL_TABLE 的表,使用以下查询对 INT 列应用 ZEROFILL——

CREATE TABLE ZEROFILL_TABLE (
   col1 int(4) ZEROFILL,
   col2 int(6) ZEROFILL,
   col3 int(8) ZEROFILL
);

获得的输出如下 −

Query OK, 0 rows affected, 6 warnings (0.02 sec)

现在,我们正在向上面创建的表中插入新行——

INSERT INTO ZEROFILL_TABLE (col1, col2, col3)
VALUES (1, 7, 3);

以下是上面代码的输出: -

Query OK, 1 row affected (0.00 sec)

现在,让我们显示 ZEROFILL_TABLE 表中的记录——

SELECT * FROM ZEROFILL_TABLE;

我们可以在下面的输出中看到,值以指定宽度显示,并且会添加前导零以保持该宽度,正如 ZEROFILL 属性所确定的那样——

INT Datatype Using a Client Program

我们还可以使用客户端程序创建 INT 数据类型的列。

Syntax

Example

以下是这些程序 −