你会在 SQL 中使用 ENUM 做什么?

Ale*_*les 5 enum

我正在尝试为我的 CIS 课程完成一项作业,我需要包含一个名为 ENUM 的数据类型。我知道这代表枚举列表,但我不确定何时是使用 ENUM 的合适时机。我正在使用的书中给出的几个例子就像一个大陆列表。我可以用它来描述工作场所的部门列表吗?

Nic*_*art 5

ENUM 数据类型可以被视为“人类可读”的数值,通常用于便利性和数据存储效率。

让我们以一个列出国家及其各自大陆的表格为例。

使用 VARCHAR

CREATE TABLE country_continent (
    country VARCHAR(100),
    continent VARCHAR(100)
);

INSERT INTO country_continent VALUES ('Kenya', 'Africa');
INSERT INTO country_continent VALUES ('New-York', 'America');
INSERT INTO country_continent VALUES ('Paris', 'Europe');
Run Code Online (Sandbox Code Playgroud)

使用 SMALLINT

为了获得更好的存储效率,大陆字段最好使用 SMALLINT(2 个字节)而不是 VARCHAR(通常为 1 个字节 + 字符串的长度):

CREATE TABLE continents (
    id SMALLINT,
    label VARCHAR(100)
);

INSERT INTO continents VALUES (1, 'Africa');
INSERT INTO continents VALUES (2, 'America');
INSERT INTO continents VALUES (3, 'Europe');

CREATE TABLE country_continent (
    country VARCHAR(100),
    continent_id SMALLINT
);

INSERT INTO country_continent VALUES ('Kenya', 1);
INSERT INTO country_continent VALUES ('New-York', 2);
INSERT INTO country_continent VALUES ('Paris', 3);
Run Code Online (Sandbox Code Playgroud)

使用枚举

这就是 ENUM 的意义所在:

CREATE TABLE country_continent (
    country VARCHAR(100),
    continent ENUM('Africa', 'America', 'Antarctica', 'Asia', 'Europe', 'Oceania')
);

INSERT INTO country_continent VALUES ('Kenya', 'Africa');
INSERT INTO country_continent VALUES ('New-York', 'America');
INSERT INTO country_continent VALUES ('Paris', 'Europe');
Run Code Online (Sandbox Code Playgroud)

使用 ENUM,您可以获得与 SMALLINT 相同(甚至更好)的存储效率,但又具有 VARCHAR 数据类型的易用性。