ENUM

ν…Œμ΄λΈ”μ˜ ꡬ쑰에 λ‚˜μ—΄λœ λͺ©λ‘ 쀑 ν•˜λ‚˜μ˜ 값을 μ €μž₯ν•  수 μžˆλŠ” νƒ€μž…μœΌλ‘œ, μ½”λ“œν™”λœ 값을 관리할 λ•Œ μ‚¬μš©ν•œλ‹€. ENUM νƒ€μž…μ˜ μž₯점으둜 μ½”λ“œ κ°’μ˜ 의미λ₯Ό μ‰½κ²Œ νŒŒμ•…ν•  수 μžˆλ‹€λŠ” 점과, λ¬Έμžμ—΄μ΄ μ•„λ‹Œ μ •μˆ˜ κ°’μœΌλ‘œ μ €μž₯ν•˜κΈ° λ•Œλ¬Έμ— μ €μž₯ 곡간을 μ ˆμ•½ν•  수 μžˆλ‹€λŠ” 점이 μžˆλ‹€. (μ΅œλŒ€ κ°œμˆ˜λŠ” 65,535개이며, 255개 λ―Έλ§Œμ€ μ €μž₯ κ³΅κ°„μœΌλ‘œ 1λ°”μ΄νŠΈ, 255개 이상은 2λ°”μ΄νŠΈλ₯Ό μ‚¬μš©)

CREATE TABLE tb_enum
(
    fd_enum ENUM ('PROCESSING', 'FAILURE', 'SUCCESS')
);

-- μ•„λž˜ 두 μΏΌλ¦¬λŠ” λ™μΌν•œ κ²°κ³Όλ₯Ό λ°˜ν™˜ν•œλ‹€.
-- 1
SELECT *
FROM tb_enum
WHERE fd_enum = 1;
-- 2
SELECT *
FROM tb_enum
WHERE fd_enum = 'PROCESSING';

ENUM νƒ€μž…μ€ λ¬Έμžμ—΄μ²˜λŸΌ λΉ„κ΅ν•˜κ±°λ‚˜ μ €μž₯ν•  수 있으며, μ‹€μ œλ‘œ λ””μŠ€ν¬λ‚˜ λ©€λͺ¨λ¦¬μ— μ €μž₯ν•˜λŠ” 값은 값에 λ§€ν•‘λœ μ •μˆ«κ°’μ„ μ €μž₯ν•œλ‹€.

ENUM μ»¬λŸΌμ— μ €μž₯λ˜λŠ” 값에 μƒˆλ‘œμš΄ 값을 μΆ”κ°€ν•΄μ•Όν•˜λŠ” 경우 ν…Œμ΄λΈ” ꡬ쑰λ₯Ό λ³€κ²½ν•΄μ•Όν•˜λŠ” 단점이 μ‘΄μž¬ν•œλ‹€. 5.6 이전 λ²„μ „μ—μ„œλŠ” 값을 μΆ”κ°€ν•  λ•Œλ§ˆλ‹€ 항상 ν…Œμ΄λΈ”μ„ λ¦¬λΉŒλ“œ ν•΄μ•Όν—€μ§€λ§Œ, 5.6 λ²„μ „λΆ€ν„°λŠ” ENUM의 λ§ˆμ§€λ§‰μ— μΆ”κ°€λ˜λŠ” κ²½μš°μ—” ν…Œμ΄λΈ” ꡬ쑰(메타데이터) λ³€κ²½λ§ŒμœΌλ‘œ μ²˜λ¦¬ν•  수 μžˆμ–΄ 단점이 μ–΄λŠμ •λ„ ν•΄μ†Œλ˜μ—ˆλ‹€. (λ§ˆμ§€λ§‰μ— μΆ”κ°€ν•˜λŠ” 경우 INSTANT μ•Œκ³ λ¦¬μ¦˜μœΌλ‘œ λ©”νƒ€λ°μ΄ν„°λ§Œ λ³€κ²½ν•˜μ§€λ§Œ, μˆœμ„œ 쀑간에 μΆ”κ°€ν•˜λŠ” 경우 COPY μ•Œκ³ λ¦¬μ¦˜μ— 읽기 μž κΈˆκΉŒμ§€ ν•„μš”ν•˜λ‹€.)

ENUM μ •λ ¬

ENUM νƒ€μž…μ€ μ‹€μ œλ‘œλŠ” μ •μˆ˜ κ°’μœΌλ‘œ μ €μž₯되기 λ•Œλ¬Έμ— μ •λ ¬ μ‹œμ—λ„ μ •μˆ˜ κ°’μœΌλ‘œ μ •λ ¬λœλ‹€. λ•Œλ¬Έμ— ENUM νƒ€μž…μ„ μ •λ ¬ν•  λ•ŒλŠ” λ¬Έμžμ—΄λ‘œ μ •λ ¬ν•˜κ³  싢은 경우 CAST ν•¨μˆ˜λ₯Ό μ‚¬μš©ν•΄μ•Όν•œλ‹€.

SELECT *
FROM tb_enum
ORDER BY CAST(fd_enum AS CHAR); 

참고자료

Last updated