Enum

你會在 SQL 中使用 ENUM 做什麼?

  • March 11, 2019

我正在嘗試完成我的 CIS 課程的作業,並且我需要包含一個名為 ENUM 的數據類型。我知道這代表列舉列表,但我不確定何時是使用 ENUM 的合適時間。我正在使用的書中給出的幾個例子就像一張大陸列表。我可以用它來描述工作場所的部門列表嗎?

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');

使用 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);

使用列舉

這是 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');

使用 ENUM,您可以獲得與 SMALLINT 相同的儲存效率(甚至更好),但 VARCHAR 數據類型易於使用。

引用自:https://dba.stackexchange.com/questions/231795