MySQL TINYINT介绍及实例

839 阅读5分钟

MySQL TINYINT

MySQL TINYINT简介

TINYINT是MySQL的数据类型,可以分配给我们需要存储整数的表的列,我们知道我们将存储在该列的数字范围不会超过TINYINT数据类型的范围。在这篇文章中,我们将了解MySQL的TINYINT数据类型,它的范围和存储大小,还将了解与TINYINT数据类型有关的某些属性,如有符号、无符号、自动递增、ZEROFILL和显示宽度。我们还将讨论TINYINT数据类型主要用在什么地方和哪些场景中。

MySQL中Tinyint数据类型的范围和存储空间

TINYINT数据类型是标准SQL整数类型的扩展。MySQL的每个积分数据类型都可以被声明为有符号或无符号。有符号的数据类型指定负的、整数的值也可以存储在该列中,而无符号的总是包含正的整数值。默认情况下,MySQL中任何积分性质的数据类型都被认为是有符号数据类型。TINYINT数据类型也是如此;默认情况下,它的功能是有符号的TINYINT。它需要1个字节,也就是8个字节来存储TINYINT数据类型的值。有符号的TINYINT数据类型从最小值到最大值的范围是-128到127,而对于无符号的TINYINT数据类型,它是0到255。

TINYINT数据类型的用法

这种数据类型在MySQL中最常用于存储布尔值。每当列的数据类型在表中被声明和指定为boolean或bool时,它就会在内部自动转换为TINYINT(1)数据类型。

TINYINT数据类型的另一种用法是用于声明表的主键,该主键将存储自动递增的值,而且你可以确定存储在该列中的值的范围不会超过TINYINT数据类型的范围。这意味着,如果你的表只包含几条记录,并且你想声明一个将存储自动递增的整数的整数列;那么你将声明该列的数据类型为TINYINT,而不是使用MySQL的int或integer数据类型。

MySQL TINYINT的例子

让我们创建一个表,其中包含作为主键的TINYINT数据类型的列,以及另外一个TINYINT数据类型的列,但不是主键。例如,我们将在我的数据库服务器上的educba数据库中创建一个名为subject的表。为此,我们首先要使用educba数据库,为此我们将执行以下查询------。

use educba;

这将得到以下的输出 -

mysql tinyint output 1

此外,我们将创建一个名为subjects的表,其中包含subject_id作为TINYINT数据类型的主键列,还有一个名为pages的无符号TINYINT列。

CREATE TABLE subjects (
subject_id TINYINT AUTO_INCREMENT PRIMARY KEY,
description VARCHAR(255),
pages TINYINT UNSIGNED
);

这将给出以下输出 -

mysql tinyint output 2

每当在auto_increment列中放入一个空值或零值时,所维护的序列会自动插入从最后插入的最大值递增1的值。因此,它从插入1个值开始。如果在auto_increment值中插入了一个非空值和非零值,那么这个值就会被接受并插入到该列中,并且序列的值被设置为该值+1,以便进一步参考。

INSERT INTO
subjects(description,pages)
VALUES
('MySQL',136),
('Angular',200),
('Java',96);

得到以下输出 -

mysql tinyint output 3

让我们通过启动命令来检查插入的记录------。

select * from subjects;

得到的输出如下

mysql tinyint output 4

我们可以看到subject_id列有默认的自动递增值1,2,3。让我们插入一条记录,提到subject_id列的值,如下所示

INSERT INTO
subjects(subject_id,description,pages)
VALUES
(126,'Maven',156);

这样就有了下面的输出 -

mysql tinyint output 5

让我们通过使用相同的选择查询来检查subjects表中的记录,得到以下输出 -

select * from subjects;

mysql tinyint output 6

我们可以看到,126个值被插入到subject_id列中。现在,当我们输入记录而不提及subject_id值时,它将考虑127作为其下一个值,因为在插入126值的subject_id列后,序列被设置为该值。执行下面的命令 -

INSERT INTO
subjects(description,pages)
VALUES
('Hibernate',99);

得到以下输出 -

mysql tinyint output 7

在选择表的记录后,它显示了以下内容 -

select * from subjects;

mysql tinyint output 8

在subjects表中插入没有指定subject_id的记录后,如下面所示---。

INSERT INTO subjects(description,pages) VALUES ('javascipt',105);

给出的错误是127个id是重复的,因为默认超过了有符号的TINYINT数据类型的范围,输出如下----。

output 9

让我们看看,如果我们指定的无符号TINYINT类型的页面列的值大于127,例如159,使用下面的插入查询,会发生什么?

INSERT INTO
subjects(subject_id,description,pages)
VALUES
(4,'Typescript',244);

这将得到以下输出 -

output 10

因为无符号tinyint的范围是255,而有符号的是127,所以完全可以正常工作。

选择记录后,我们看到以下输出 -

select * from subjects;

output 11

显示宽度和ZEROFILL属性

Mysql允许指定列的显示宽度,方法是在数据类型中指定显示宽度,然后是()括号,里面可以指定宽度的积分值。这并不说明存储的大小;相反,它代表了显示数值的格式。当列使用ZEROFILL属性时,那么在显示宽度所指定的格式中,所有的空白都被填充为零,并显示数字。例如,如果我将科目表的pages列改为ZEROFILL属性,并指定显示宽度为3,使用以下命令 -

ALTER TABLE subjects MODIFY COLUMN pages TINYINT(3) ZEROFILL;

就会出现以下输出 -

output 12

默认情况下,当一个列被赋予ZEROFILL属性时,它被自动认为是无符号列。现在让我们选择主题表的记录,观察页面列值的显示格式,应该是3位数的格式,空白处用0代替。

选择查询给出的输出结果如下

select * from subjects;

output 13

结论

TINYINT数据类型最常被用来存储布尔值,或者在正整数中小于255,在有符号整数中小于127的小范围的值。它可以被赋予AUTO_INCREMENT、ZEROFILL属性,其显示宽度可以通过使用()括号来指定。