πŸ“šSQL κ°œμš”

SQL(Structured Query Language)은 κ΅¬μ‘°ν™”λœ 질의 μ–Έμ–΄λΌλŠ” 의미λ₯Ό 가지고 μ‚¬μš©μžμ™€ DBMS κ°„μ˜ μ˜μ‚¬μ†Œν†΅μ„ μœ„ν•œ μ–Έμ–΄μž…λ‹ˆλ‹€. RDBMSμ—μ„œ 데이터λ₯Ό κ΄€λ¦¬ν•˜κΈ° μœ„ν•œ λΉ„μ ˆμ°¨μ  언어이고 λ°μ΄ν„°λ² μ΄μŠ€μ—μ„œ μ›ν•˜λŠ” 정보λ₯Ό 간단λͺ…λ£Œν•˜κ²Œ ν‘œν˜„ν•  수 μžˆλŠ” μ„ μ–Έν˜• μ–Έμ–΄μž…λ‹ˆλ‹€. SQL은 데이터에 λŒ€ν•œ μ •μ˜μ™€ μ‘°μž‘, κ΄€λ¦¬ν•˜λŠ” 역할에 따라 μ„Έ μ˜μ—­μ˜ μ–Έμ–΄λ‘œ λ‚˜λ‰©λ‹ˆλ‹€.

  • 데이터 μ •μ˜ μ–Έμ–΄(DDL): 데이터 μ •μ˜ μ–Έμ–΄λŠ” λ°μ΄ν„°λ² μ΄μŠ€ λ‚΄μ˜ 개체λ₯Ό 생성 및 μ‚­μ œν•˜κ³  κ·Έ ꡬ쑰λ₯Ό μ‘°μž‘ν•˜λŠ” SQL문을 μ˜λ―Έν•©λ‹ˆλ‹€. ν…Œμ΄λΈ” μŠ€ν‚€λ§ˆ μ •μ˜, ν…Œμ΄λΈ” μ‚­μ œ, ν…Œμ΄λΈ” μŠ€ν‚€λ§ˆ λ³€κ²½ λ“±μ˜ κΈ°λŠ₯을 μˆ˜ν–‰ν•©λ‹ˆλ‹€.

  • 데이터 μ‘°μž‘ μ–Έμ–΄(DML): 데이터 μ‘°μž‘ μ–Έμ–΄λŠ” λ ˆμ½”λ“œ 검색, μΆ”κ°€, μ‚­μ œ λ“±μ˜ μ‹€μ œ 데이터 μ‘°μž‘κ³Ό κ΄€λ ¨λœ SQL문을 μ˜λ―Έν•©λ‹ˆλ‹€. INSERT, UPDATE, DELETE, SELECTλ¬Έκ³Ό 같은 λ‹€μ–‘ν•œ λΆ€κ°€ κΈ°λŠ₯을 μ œκ³΅ν•©λ‹ˆλ‹€.

  • 데이터 μ œμ–΄ μ–Έμ–΄(DCL): 데이터 μ œμ–΄ μ–Έμ–΄λŠ” DBMS의 λ™μž‘ μ„€μ • 및 DBMS 접근에 λŒ€ν•œ μ‚¬μš©μž κΆŒν•œμ„ κ΄€λ¦¬ν•˜λŠ” SQLλͺ…λ Ήμ–΄ μ§‘ν•©μž…λ‹ˆλ‹€. GRANT, REVOKE, BEGIN λ“±μ˜ λͺ…λ Ήμ–΄λ‘œ κ΅¬μ„±λ˜κ³ , 주둜 λ°μ΄ν„°λ² μ΄μŠ€ κ΄€λ¦¬μž(DBA)κ°€ μ‚¬μš©ν•©λ‹ˆλ‹€.




πŸ“šλ°μ΄ν„° μ •μ˜ μ–Έμ–΄

SQL의 데이터 μ •μ˜ μ–Έμ–΄λŠ” ν…Œμ΄λΈ”μ— λŒ€ν•œ μ •λ³΄λΏλ§Œ μ•„λ‹ˆλΌ ν…Œμ΄λΈ”μ˜ μŠ€ν‚€λ§ˆ, μ»¬λŸΌλ“€μ˜ 데이터 νƒ€μž…, μ œμ•½μ‘°κ±΄, 색인 ꡬ쑰 λ“±μ˜ λ°μ΄ν„°λ² μ΄μŠ€ 객체λ₯Ό μ •μ˜ν•©λ‹ˆλ‹€.

μ’…λ₯˜ 적용 κΈ°λŠ₯
CREATE SCHEMA μŠ€ν‚€λ§ˆ 생성
CREATE TABLE ν…Œμ΄λΈ” 생성
CREATE INDEX 인덱슀 생성
CREATE VIEW λ·° 생성
ALTER SCHEMA μŠ€ν‚€λ§ˆ μˆ˜μ •
ALTER TABLE ν…Œμ΄λΈ” μˆ˜μ •
DROP SCHEMA μŠ€ν‚€λ§ˆ μ‚­μ œ
DROP TABLE ν…Œμ΄λΈ” μ‚­μ œ
DROP INDEX 인덱슀 μ‚­μ œ
DROP VIEW λ·° μ‚­μ œ


πŸ“„μŠ€ν‚€λ§ˆ μ •μ˜

DDL문으둜 생성 κ°€λŠ₯ν•œ κ°€μž₯ μƒμœ„ λ‹¨κ³„μ˜ κ°œμ²΄λŠ” μŠ€ν‚€λ§ˆμž…λ‹ˆλ‹€. μŠ€ν‚€λ§ˆλŠ” MySQLμ—μ„œ λ°μ΄ν„°λ² μ΄μŠ€λ₯Ό μ˜λ―Έν•©λ‹ˆλ‹€. μŠ€ν‚€λ§ˆ μƒμ„±μ—λŠ” 두 가지 방법이 μžˆμŠ΅λ‹ˆλ‹€.

  1. MySQL μ›Œν¬λ²€μΉ˜ Forward Engineer κΈ°λŠ₯을 μ΄μš©ν•˜μ—¬ μžλ™μ μœΌλ‘œ μŠ€ν‚€λ§ˆμ™€ ν…Œμ΄λΈ”μ„ 생성

  2. MySQL μ›Œν¬λ²€μΉ˜ SQL νŒ¨λ„μ—μ„œ μŠ€ν‚€λ§ˆ 생성문 μž…λ ₯


  • μŠ€ν‚€λ§ˆ 생성
    1
    
    CREATE SCHEMA μŠ€ν‚€λ§ˆ 이름
    


  • μŠ€ν‚€λ§ˆ μ‚­μ œ
    1
    
    DROP SCHEMA μŠ€ν‚€λ§ˆ 이름
    

DROP SCHEMA문을 μ΄μš©ν•˜λ©΄ μŠ€ν‚€λ§ˆ λ‚΄λΆ€μ˜ λͺ¨λ“  데이터가 같이 μ‚­μ œλ©λ‹ˆλ‹€.



πŸ“„ν…Œμ΄λΈ” μ •μ˜

ν…Œμ΄λΈ”μ€ κ΄€κ³„ν˜• λͺ¨λΈμ˜ λ¦΄λ ˆμ΄μ…˜μ— λŒ€μ‘λ˜λŠ” κ΅¬μ‘°μž…λ‹ˆλ‹€. DBMSμ—μ„œ κ°€μž₯ 기본적인 데이터 μ €μž₯ꡬ쑰인 ν…Œμ΄λΈ”μ€ CREATE TABLE문을 μ‚¬μš©ν•˜μ—¬ μ •μ˜λ©λ‹ˆλ‹€. ν…Œμ΄λΈ”μ˜ 이름, 각각의 μ»¬λŸΌμ— λŒ€ν•œ 컬럼의 이름, 데이터 νƒ€μž…, μ œμ•½μ‘°κ±΄μ„ μ¨μ„œ μƒˆλ‘œμš΄ 데이블을 μ •μ˜ν•©λ‹ˆλ‹€.

  • ν…Œμ΄λΈ” 생성
    1
    2
    3
    4
    5
    6
    7
    8
    9
    
    CREATE TABLE ν…Œμ΄λΈ” 이름(
    컬럼 λ°μ΄ν„°νƒ€μž… [μ œμ•½μ‘°κ±΄]
    컬럼 λ°μ΄ν„°νƒ€μž… [μ œμ•½μ‘°κ±΄]
    ...
    
    [PRIMARY KEY 컬럼]
    [UNIQUE 컬럼]
    [FOREIGN KEY 컬럼 REFERENCES ν…Œμ΄λΈ”(컬럼)]
    )
    


  • 데이터 νƒ€μž…
    ν…Œμ΄λΈ”μ„ μ •μ˜ν•  λ•Œ 각각의 μ»¬λŸΌμ— μ €μž₯될 수 μžˆλŠ” 데이터 νƒ€μž…μ„ λͺ…μ‹œν•΄μ•Ό ν•©λ‹ˆλ‹€. 데이터 νƒ€μž…μ€ μ»¬λŸΌμ— μ €μž₯λ˜λŠ” κ°’μ˜ μ’…λ₯˜λ₯Ό λ§ν•©λ‹ˆλ‹€.
μ’…λ₯˜ 데이터 νƒ€μž… κΈ°λŠ₯
μ •μˆ˜ TINYINT -128~127 μ‚¬μ΄μ˜ μ •μˆ˜
μ •μˆ˜ SMALLINT -32,768~32,767 μ‚¬μ΄μ˜ μ •μˆ˜
μ •μˆ˜ MEDIUMINT -8,388,608~8,388,607 μ‚¬μ΄μ˜ μ •μˆ˜
μ •μˆ˜ INT -2,147,483,648~2,147,483,647 μ‚¬μ΄μ˜ μ •μˆ˜
μ •μˆ˜ BIGINT -9,223,372,036,854,775,808~9,223,372,036,854,775,8087 μ‚¬μ΄μ˜ μ •μˆ˜
κ³ μ • μ†Œμˆ˜ν˜• DECIMAL μ‹­μ§„μˆ˜λ₯Ό ν‘œν˜„
κ³ μ • μ†Œμˆ˜ν˜• NUMERIC DECIMALκ³Ό 동일
뢀동 μ†Œμˆ˜ν˜• FLOAT 4byte 크기λ₯Ό κ°–λŠ” 뢀동 μ†Œμˆ˜
뢀동 μ†Œμˆ˜ν˜• FLOAT(P) 유효숫자λ₯Ό μ €μž₯ν•˜κΈ° μœ„ν•œ μžλ¦Ώμˆ˜κ°€ P개인 뢀동 μ†Œμˆ˜
뢀동 μ†Œμˆ˜ν˜• DOUBLE 8byte의 크기λ₯Ό κ°–λŠ” 뢀동 μ†Œμˆ˜
문자 CHAR(n) 길이가 n으둜 κ³ μ •λœ λ¬Έμžμ—΄
문자 VARCHAR(n) μ΅œλŒ€ n개둜 κ΅¬μ„±λœ 가변길이 λ¬Έμžμ—΄
문자 TEXT 길이가 κΈ΄ 가변길이 λ¬Έμžμ—΄
문자 ENUM μœ ν•œ 개의 λ¬Έμžμ—΄ 집합 쀑 ν•˜λ‚˜μ˜ 값을 선택
λ‚ μ§œ/μ‹œκ°„ DATE β€˜CCYY-MM-DD’
λ‚ μ§œ/μ‹œκ°„ TIME β€˜00:00:00’
λ‚ μ§œ/μ‹œκ°„ DATETIME β€˜CCYY-MM-DD 00:00:00’, 항상 일정
λ‚ μ§œ/μ‹œκ°„ TIMESTAMP β€˜CCYY-MM-DD 00:00:00’, MySQL μ„œλ²„μ˜ νƒ€μž„μ‘΄μ— 따라 λ³€κ²½
λ‚ μ§œ/μ‹œκ°„ YEAR β€˜CCYY’


  • ν…Œμ΄λΈ” μˆ˜μ •
    β€˜ALTER TABLE ν…Œμ΄λΈ”μ΄λ¦„β€™μ€ ν•„μˆ˜ μž…λ ₯ μ‚¬ν•­μž…λ‹ˆλ‹€. ν•˜λ‚˜ μ΄μƒμ˜ ADD COLUMN, DROP COLUMN, CHANGE COLUMN, MODIFY COLUM을 μ μš©ν•΄μ•Όν•˜κ³  λ™μ‹œμ— μ—¬λŸ¬ λͺ…령을 μ μš©ν•  수 μžˆμŠ΅λ‹ˆλ‹€.
1
2
3
4
5
6
7
8
9
10
11
12
13
ALTER TABLE ν…Œμ΄λΈ” 이름
  /* 주어진 컬럼 이름과 데이터 νƒ€μž…μ— ν•΄λ‹Ήν•˜λŠ” 
   μƒˆλ‘œμš΄ 컬럼 μΆ”κ°€ */
  [ADD COLUMN 컬럼 λ°μ΄ν„°νƒ€μž„[μ œμ•½μ‘°κ±΄]]

  -- μ§€μ •λœ μ»¬λŸΌμ„ ν…Œμ΄λΈ”μ—μ„œ μ‚­μ œ
  [DROP COLUMN 컬럼, ...]

  -- 컬럼의 μ΄λ¦„μ΄λ‚˜ 데이터 νƒ€μž… λ˜λŠ” μ œμ•½μ‘°κ±΄μ„ λ³€κ²½
  [CHANGE COLUMN μˆ˜μ •μ „μ»¬λŸΌ, μˆ˜μ •ν›„μ»¬λŸΌ]

  -- 컬럼의 데이터 νƒ€μž… λ³€κ²½
  [MODIFY COLUMN 컬럼 μƒˆλ‘œμš΄_λ°μ΄ν„°νƒ€μž…]


  • ν…Œμ΄λΈ” μ‚­μ œ
1
DROP TABLE ν…Œμ΄λΈ” 이름



πŸ“„μ œμ•½μ‘°κ±΄ μ‚¬μš©

ν…Œμ΄λΈ”κ³Ό ν…Œμ΄λΈ”μ˜ μ»¬λŸΌμ„ μ„Έλ°€ν•˜κ²Œ κ΄€λ¦¬ν•˜κ³ μž ν•  λ•Œ μ œμ•½μ‘°κ±΄μ„ μ΄μš©ν•˜μ—¬ μ€‘λ³΅λ˜λŠ” λ ˆμ½”λ“œ μ‚½μž…μ„ λ§‰κ±°λ‚˜, 값이 NULL이 μ•„λ‹Œ 값이 ν•„μˆ˜λ‘œ μž…λ ₯λ˜λ„λ‘ μ„€μ •ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

  • PRIMARY KEY 절
    PRIMARY KEY μ ˆμ€ κΈ°λ³Έν‚€λ₯Ό μ§€μ •ν•˜λŠ” μ œμ•½μ‘°κ±΄μž…λ‹ˆλ‹€. ν•˜λ‚˜ μ΄μƒμ˜ μ»¬λŸΌμ„ κΈ°λ³Έν‚€λ‘œ μ„€μ •ν•  수 μžˆμŠ΅λ‹ˆλ‹€. νŠΉμ • μ»¬λŸΌμ— κΈ°λ³Έν‚€ 쑰건을 μ •μ˜ν•˜λ©΄ ν…Œμ΄λΈ”μ˜ λͺ¨λ“  λ ˆμ½”λ“œλŠ” ν•΄λ‹Ή μ»¬λŸΌμ— λŒ€ν•΄ κ³ μœ ν•œ 값을 κ°€μ Έμ•Ό ν•˜κ³ , NULL 값은 μž…λ ₯ν•  수 μ—†μŠ΅λ‹ˆλ‹€.


  • NOT NULL 절
    NOT NULL μ ˆμ€ NN μ ˆμ΄λΌκ³ λ„ ν•©λ‹ˆλ‹€. NOT NULL μ œμ•½μ‘°κ±΄μ€ νŠΉμ • μ»¬λŸΌμ„ μ •μ˜ν•˜λ©΄ λͺ¨λ“  λ ˆμ½”λ“œλ“€μ€ ν•΄λ‹Ή μ»¬λŸΌμ— λ°˜λ“œμ‹œ μ–΄λ–€ 값이 μ €μž₯λ˜μ–΄μ•Ό ν•©λ‹ˆλ‹€.


  • UNIQUE 절
    UNIQUE μ ˆμ€ νŠΉμ • μ»¬λŸΌμ— μ œμ•½ 쑰건을 μ •μ˜ν•˜λ©΄ μ–΄λ–€ λ ˆμ½”λ“œλ“€λ„ ν•΄λ‹Ή μ»¬λŸΌμ— λŒ€ν•΄ λ‹€λ₯Έ λ ˆμ½”λ“œμ™€ λ™μΌν•œ 값을 κ°€μ§ˆ 수 μ—†μŠ΅λ‹ˆλ‹€.


  • AUTO_INCREMENT 절
    AUTO_INCREMENT μ ˆμ€ μ‚¬μš©μžκ°€ 직접 μž…λ ₯ν•˜μ§€ μ•Šμ•„λ„ λ ˆμ½”λ“œκ°€ 좔가될 λ•Œ μžλ™μ μœΌλ‘œ κΈ°μ‘΄ λ ˆμ½”λ“œμ˜ 값을 μ°Έκ³ ν•˜μ—¬ 순차적으둜 ν•΄λ‹Ή μ»¬λŸΌμ— 1을 μ¦κ°€μ‹œν‚¨ 값을 μ €μž₯ν•©λ‹ˆλ‹€. INT κ³„μ—΄μ˜ 데이터 νƒ€μž…μ—λ§Œ μ μš©ν•  수 μžˆμŠ΅λ‹ˆλ‹€.


  • DEFAULT 절
    DEFAULT μ ˆμ€ ν•΄λ‹Ή μ»¬λŸΌμ— μ–΄λ–€ 값이 μž…λ ₯λ˜μ§€ μ•ŠμœΌλ©΄ μžλ™μœΌλ‘œ μ§€μ •λœ 값이 μž…λ ₯λ˜λ„λ‘ ν•˜λŠ” μ‘°κ±΄μž…λ‹ˆλ‹€.


  • FOREIGN KEY 절
    λ‹€λ₯Έ μ»¬λŸΌμ„ μ°Έμ‘°ν•˜λŠ” μ™Έλž˜ν‚€λ₯Ό μ •μ˜ν•©λ‹ˆλ‹€. μ™Έλž˜ν‚€ μ œμ•½μ‘°κ±΄μ„ μ •μ˜ν•˜κΈ° μœ„ν•΄ μ°Έμ‘°ν•˜λŠ” ν…Œμ΄λΈ” 컬럼과 μ°Έμ‘°λ˜λŠ” ν…Œμ΄λΈ” 컬럼이 ν•„μš”ν•œλ°, μ°Έμ‘°ν•˜λŠ” 컬럼의 값이 μ°Έμ‘°λ˜λŠ” μ»¬λŸΌμ— μ‘΄μž¬ν•˜μ§€ μ•Šμ„ 경우 μ°Έμ‘° 무결성 μ œμ•½μ‘°κ±΄μ— μ˜ν•΄ DBMS 싀행을 κ±°μ ˆν•©λ‹ˆλ‹€.
1
2
FOREIGN KEY (μ°Έμ‘°ν•˜λŠ” μ»¬λŸΌμ΄λ¦„)
  REFERENCES μ°Έμ‘°λ˜λŠ” ν…Œμ΄λΈ”μ΄λ¦„(μ°Έμ‘°λ˜λŠ” μ»¬λŸΌμ΄λ¦„)


  • CHECK 절
    ν…Œμ΄λΈ” 생성 μ‹œ μ»¬λŸΌκ°’μ΄ νŠΉμ • 쑰건을 μ€€μˆ˜ν•˜μ—¬ 데이터 무결성을 μœ μ§€ν•˜κΈ° μœ„ν•΄ CHECKμ ˆμ„ μ œκ³΅ν•©λ‹ˆλ‹€. ν•΄λ‹Ή 컬럼이 쑰건을 μ€€μˆ˜ν•˜μ§€ μ•Šμ„ 경우 λ ˆμ½”λ“œ μ‚½μž… λ˜λŠ” μˆ˜μ •μ„ κ±°μ ˆν•©λ‹ˆλ‹€. MySQL μ„œλ²„ 8.X μ΄ν•˜ 버전은 CHECK μ ˆμ„ μ§€μ›ν•˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€.
1
2
3
4
5
CHECK (쑰건)

--λ˜λŠ”

CONSTRAINT id CHECK (쑰건)



Leave a comment