Enum
你會在 SQL 中使用 ENUM 做什麼?
我正在嘗試完成我的 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 數據類型易於使用。