ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • SQL - DDL ๋ช…๋ น์–ด, ํ…Œ์ด๋ธ” ์ƒ์„ฑ ์ œ์•ฝ์กฐ๊ฑด
    DATABASE 2020. 7. 24. 08:50

    ๐ŸŽฏ SQL DDL ๋ช…๋ น์–ด CREATE, ALTER, DROP, RENAME, TRUNCATE ๋ฅผ ์•Œ์•„๋ณธ๋‹ค.

     

     

     

     

    DDL( Data Definition Language )

     

    ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์˜ ๊ตฌ์กฐ๋ฅผ ์ƒ์„ฑ, ์ˆ˜์ •, ์‚ญ์ œํ•  ์ˆ˜ ์žˆ๋Š” ์–ธ์–ด

    ์‹คํ–‰๊ฒฐ๊ณผ๊ฐ€ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์— ์ฆ‰๊ฐ ๋ฐ˜์˜๋˜๋ฉฐ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์‚ฌ์ „์— ์ •๋ณด๋ฅผ ๊ธฐ๋กํ•œ๋‹ค.

     

     

    ์˜ค๋ผํด ๊ฐ์ฒด

     

    ์˜ค๋ผํด ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๊ฐ€ ๊ฐ€์ง„ ๋ฐ์ดํ„ฐ ๊ตฌ์กฐ๋ฅผ ๋งํ•œ๋‹ค.

     

    DDL์€ ์ด๋Ÿฐ ์˜ค๋ผํด ๊ฐ์ฒด๋ฅผ ์ƒ์„ฑ,์ˆ˜์ •,์‚ญ์ œํ•˜๊ธฐ ์œ„ํ•ด ์‚ฌ์šฉ๋˜๋Š” ์‹œํ€„๋ฌธ์ด๋‹ค

     

     

    DDL ๋ช…๋ น๋ฌธ ์ข…๋ฅ˜

     

    CREATE ์ƒ์„ฑ / ALTER ๋ณ€๊ฒฝ / DROP ์‚ญ์ œ / RENAME ์ด๋ฆ„๋ณ€๊ฒฝ / TRUNCATE ์ ˆ์‚ญ

     

     

     

    ํ…Œ์ด๋ธ” ์ƒ์„ฑ CREATE

     

    CREATE TABLE [์Šคํ‚ค๋งˆ].ํ…Œ์ด๋ธ”๋ช…
    (์ปฌ๋Ÿผ๋ช… ๋ฐ์ดํ„ฐํƒ€์ž… [DEFAULT ๊ฐ’ | ์ œ์•ฝ์กฐ๊ฑด]);

     

    CREATE TABLE scott.emp
    (empno NUMBER(4),
     ename VARCHAR2(20),
     hiredate DATE,
     sal NUMBER(7,2));

     

     

    ์Šคํ‚ค๋งˆ

     

    ์‚ฌ์šฉ์ž๊ฐ€ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์— ์ƒ์„ฑํ•œ ๊ฐ์ฒด๋“ค์˜ ๋Œ€ํ‘œ ์ด๋ฆ„์ด๋ฉฐ

    ์‚ฌ์šฉ์ž์˜ ๊ณ„์ •๋ช…๊ณผ ๋™์ผํ•˜๋‹ค. SCOTT์ ‘์†์ด๋ฉด SCOTT์ด ์Šคํ‚ค๋งˆ

    ์ž์‹ ์˜ ์Šคํ‚ค๋งˆ์— ์†ํ•œ ๊ฐ์ฒด์— ์ ‘๊ทผํ•  ๋• ์Šคํ‚ค๋งˆ๋ฅผ ์ƒ๋žตํ•˜๊ธฐ ๋•Œ๋ฌธ์—

    ๋งŒ์•ฝ ๊ถŒํ•œ์„ ๊ฐ€์ง€๊ณ  ๋‹ค๋ฅธ ๊ฐ์ฒด์— ์ ‘๊ทผํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” ์Šคํ‚ค๋งˆ.๊ฐ์ฒด๋ช… ํ˜•์‹์œผ๋กœ ์‚ฌ์šฉํ•ด์•ผ ํ•œ๋‹ค.

    ๋”ฐ๋ผ์„œ ๊ฐ์ฒด์ด๋ฆ„์„ ๊ฐ„ํŽธํ•˜๊ณ  ์•Œ์•„๋ณด๊ธฐ ์‰ฝ๊ฒŒ ์„ค์ •ํ•˜๋Š” ๊ฒŒ ์ข‹๋‹ค.

     

     

    ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ๊ฐ์ฒด ์ด๋ฆ„ ์ง€์ • ๋ฐฉ๋ฒ•

     

     

     

    ํ…Œ์ด๋ธ”์˜ ๋ฐ์ดํ„ฐํƒ€์ž… ์ข…๋ฅ˜

     

     

    LONGํƒ€์ž…์€ VARCHAR2์™€ ๋น„์Šทํ•ด๋ณด์ด์ง€๋งŒ ํ•˜๋‚˜์˜ ํ…Œ์ด๋ธ”์— ํ•œ๋ฒˆ๋งŒ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๊ณ 

    NOT NULL ์ œ์•ฝ์กฐ๊ฑด ์ด์™ธ์˜ ๋‹ค๋ฅธ ์ œ์•ฝ์กฐ๊ฑด์€ ์‚ฌ์šฉํ•  ์ˆ˜ ์—†๋‹ค.

    ์ธ๋ฑ์Šค, CTAS ๋ฐ SELECT๋ฌธ์—์„œ WEHRE, GROUP BY, ORDER BY, DISTICT ๋„ ์‚ฌ์šฉ์ด ๋ถˆ๊ฐ€๋Šฅํ•˜๋‹ค.

     

     

     

    DEFAULT ์˜ต์…˜

     

    INSERT๋ฌธ์œผ๋กœ ํ…Œ์ด๋ธ”์— ๋ฐ์ดํ„ฐ๋ฅผ ์ž…๋ ฅํ•  ๋•Œ, ํ•ด๋‹น ์ปฌ๋Ÿผ์— ๊ฐ’์„ ์ง€์ •ํ•˜์ง€ ์•Š์€ ๊ฒฝ์šฐ ์ž๋™์œผ๋กœ ๋„๊ฐ’์ด ์ €์žฅ๋œ๋‹ค.

    DEFAULT๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ์ปฌ๋Ÿผ๊ฐ’์„ ์ง€์ •ํ•˜์ง€ ์•Š์•„๋„ ์ž๋™์œผ๋กœ ๊ธฐ๋ณธ๊ฐ’์ด ์ž…๋ ฅ๋˜์–ด NULL๊ฐ’์ด ์ €์žฅ๋˜๋Š” ๊ฑธ ๋ง‰์„ ์ˆ˜ ์žˆ๋‹ค.

    ๋‚ ์งœ๋‚˜ ์„ฑ๋ณ„ ๊ฐ™์€ ๊ณ ์ •๋œ ๊ฐ’๋งŒ ๊ฐ–๋Š” ์ปฌ๋Ÿผ์— ์œ ์šฉํ•˜๊ฒŒ ์‚ฌ์šฉ๋œ๋‹ค.

     

    -- ํ…Œ์ด๋ธ” ์ƒ์„ฑ
    
    
    CREATE TABLE DEF_TABLE
    (NUM NUMBER(2),
    WRITEDAY DATE);
    
    CREATE TABLE DEF_TABLE2
    (NUM NUMBER(2),
    WRITEDAY DATE DEFAULT SYSDATE);  -- ๋””ํดํŠธ์˜ต์…˜ ์ ์šฉ
    
    
    
    
    -- ๋ฐ์ดํ„ฐ ์ž…๋ ฅ
    
    
    INSERT INTO DEF_TABLE(NUM)
    VALUES(1);
    -- ์ž…์‚ฌ์ผ์— null ์ถœ๋ ฅ
    
    
    INSERT INTO DEF_TABLE2(NUM)
    VALUES(1);
    -- ์ž…์‚ฌ์ผ์— sysdate ์ถœ๋ ฅ
    
    
    INSERT INTO DEF_TABLE2(NUM, WRITEDAY)
    VALUES (2, DEFAULT);
    -- ์ž…์‚ฌ์ผ์— sysdate ์ถœ๋ ฅ
    

     

    CREATE TABLE EMP2
    (EMPNO NUMBER(4),
    ENAME VARCHAR2(20),
    HIREDATE DATE DEFAULT SYSDATE,
    SAL NUMBER(7,2));
    
    INSERT INTO EMP2(EMPNO, ENAME, SAL)
    VALUES (10, 'ํ™๊ธธ๋™', 3000);
    
    SELECT * FROM EMP2;

     

    ์ž…์‚ฌ์ผ ์ปฌ๋Ÿผ๊ฐ’์„ ๋ช…์‹œ์ ์œผ๋กœ ์ €์žฅํ•˜์ง€ ์•Š์•„๋„ ์ž๋™์œผ๋กœ ํ˜„์žฌ ๋‚ ์งœ๊ฐ’์„ ์ €์žฅํ•˜๋„๋ก ๋””ํดํŠธ ์˜ต์…˜์„ ์„ค์ •ํ–ˆ๋‹ค.

    EMP2 ์ปฌ๋Ÿผ์ค‘ HIREDATE๋งŒ ๋นผ๊ณ  ๋ฐ์ดํ„ฐ๋ฅผ ์ƒˆ๋กœ ์ €์žฅํ•ด์ค€๋‹ค.

    ํ…Œ์ด๋ธ” ํ™•์ธํ•ด๋ณด๋ฉด ์ž…์‚ฌ์ผ์—๋Š” null์ด ์•„๋‹Œ ํ˜„์žฌ ๋‚ ์งœ๊ฐ€ ๊ธฐ๋ณธ๊ฐ’์œผ๋กœ ์ €์žฅ๋˜์–ด ์žˆ๋Š”๊ฑธ ์•Œ ์ˆ˜ ์žˆ๋‹ค.

     

     

    ์„œ๋ธŒ์ฟผ๋ฆฌ๋ฅผ ์ด์šฉํ•œ ํ…Œ์ด๋ธ” ์ƒ์„ฑ

     

    ํ…Œ์ด๋ธ” ์ƒ์„ฑ ๋ฌธ๋ฒ•์— ์„œ๋ธŒ์ฟผ๋ฆฌ๋ฅผ ์กฐํ•ฉํ•œ ํ˜•ํƒœ๋กœ ๋ฌธ์žฅ์˜ ์•ž๊ธ€์ž๋ฅผ ๋”ฐ์„œ CTAS ์”จํƒ์Šค๋ผ๊ณ  ํ•œ๋‹ค.

    ํ…Œ์ด๋ธ”์˜ ์ปฌ๋Ÿผ์ด๋ฆ„, ๋ฐ์ดํ„ฐํƒ€์ž…, NOT NULL ์ œ์•ฝ์กฐ๊ฑด๋งŒ ๋ณต์‚ฌ๋˜๊ณ , ์›๋ณธํ…Œ์ด๋ธ”์˜ ์ธ๋ฑ์Šค ๋ฐ ๋กฑํƒ€์ž…์€ ๋ณต์‚ฌํ•  ์ˆ˜ ์—†๋‹ค.

     

    CREATE TABLE DEPTA
    AS
    SELECT * FROM DEPT;
    
    SELECT COUNT(*) FROM DEPTA;
    
    -- DEPT๋ถ€์„œ์—์„œ ๋ชจ๋“  ๋ฐ์ดํ„ฐ ๊ฐ€์ ธ์™€์„œ ํ…Œ์ด๋ธ” ์ƒ์„ฑ
    
    
    
    CREATE TABLE DEPTB(NO, NAME)
    AS
    SELECT DEPTNO, DNAME
    FROM DEPT;
    
    SELECT COUNT(*) FROM DEPTB;
    
    -- DEPT๋ถ€์„œ์—์„œ ๋‘ ์ปฌ๋Ÿผ์˜ ๋ฐ์ดํ„ฐ๋งŒ ๊ฐ€์ ธ์™€์„œ ํ…Œ์ด๋ธ” ์ƒ์„ฑ
    
    
    
    
    CREATE TABLE DEPTC
    AS 
    SELECT * FROM DEPT
    WHERE 1=2;
    
    SELECT COUNT(*) FROM DEPTC;
    
    -- DEPTํ…Œ์ด๋ธ”์—์„œ ํ…Œ์ด๋ธ” ๊ตฌ์กฐ๋งŒ ๊ฐ€์ ธ์˜ค๊ธฐ

     

     

     

    ์ œ์•ฝ์กฐ๊ฑด

     

    ํ…Œ์ด๋ธ”์— ๋ถ€์ ์ ˆํ•œ ๋ฐ์ดํ„ฐ๊ฐ€ ์ €์žฅ๋˜๋Š” ๊ฑธ ๋ฐฉ์ง€ํ•˜๊ธฐ ์œ„ํ•ด ํ…Œ์ด๋ธ” ์ƒ์„ฑํ•  ๋•Œ ๊ฐ ์ปฌ๋Ÿผ์— ์—ฌ๋Ÿฌ๊ฐ€์ง€ ์ œ์•ฝ์กฐ๊ฑด์„ ์ •์˜ํ•œ๋‹ค.

     

     

    ์ œ์•ฝ์กฐ๊ฑด ์ง€์ • ๋ฐฉ๋ฒ•

     

    1) ์ปฌ๋Ÿผ๋ ˆ๋ฒจ ์ง€์ •

    ํ…Œ์ด๋ธ” ์ƒ์„ฑํ•  ๋•Œ ์ปฌ๋Ÿผ์„ ์ •์˜ํ•˜๋ฉด์„œ ๊ฐ™์ด ์ œ์•ฝ์กฐ๊ฑด์„ ์จ์ค€๋‹ค. ํ•œ๊ฐœ์˜ ์ปฌ๋Ÿผ์— ํ•˜๋‚˜์˜ ์ œ์•ฝ์กฐ๊ฑด๋งŒ ์ •์˜ ๊ฐ€๋Šฅํ•˜๋ฉฐ 5๊ฐ€์ง€ ์ œ์•ฝ์กฐ๊ฑด ๋ชจ๋‘ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค.

     

    2) ํ…Œ์ด๋ธ”๋ ˆ๋ฒจ ์ง€์ •

    ๋ชจ๋“  ์ปฌ๋Ÿผ ์ •์˜ ํ›„ ๋งจ ๋งˆ์ง€๋ง‰์— ์ œ์•ฝ์กฐ๊ฑด์„ ์ถ”๊ฐ€ํ•˜์—ฌ ํ…Œ์ด๋ธ”์˜ ์ปฌ๋Ÿผ๊ณผ ๋ถ„๋ฆฌํ•˜์—ฌ ์ •์˜ํ•œ๋‹ค.

    ํ•œ๊ฐœ ์ด์ƒ์˜ ์ปฌ๋Ÿผ์— ํ•œ๊ฐœ์˜ ์ œ์•ฝ์กฐ๊ฑด ์ •์˜ ๊ฐ€๋Šฅ. NOT NULL ๋นผ๊ณ  ๋‚˜๋จธ์ง€ 4๊ฐœ์˜ ์ œ์•ฝ์กฐ๊ฑด์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค.

    ํ…Œ์ด๋ธ” ์ƒ์„ฑ๊ณผ ๋™์‹œ์— ์ง€์ •ํ•  ์ˆ˜๋„ ์žˆ๊ณ  ํ…Œ์ด๋ธ” ์ƒ์„ฑ ํ›„ ์ถ”๊ฐ€ํ•  ์ˆ˜๋„ ์žˆ๋‹ค.

     

     

    user_constraints ๋ฐ์ดํ„ฐ ์‚ฌ์ „ ์ด์šฉ

     

    SELECT *
    FROM USER_CONSTRAINTS
    WHERE table_name='ํ…Œ์ด๋ธ”๋ช…';  -- ํ…Œ์ด๋ธ”๋ช…์€ ๋Œ€๋ฌธ์ž๋กœ

     

    user_constraints์˜ DATA DICTIONARY VIEW๋ฅผ ์กฐํšŒํ•˜๋ฉด ์ง€์ • ํ…Œ์ด๋ธ”์— ์ •์˜๋œ ์ œ์•ฝ ์กฐ๊ฑด์„ ๋ณผ ์ˆ˜ ์žˆ๋‹ค.

    ์ œ์•ฝ์กฐ๊ฑด์€ CONSTRAINT_TYPE ์ปฌ๋Ÿผ์—์„œ P, R, U, C 4๊ฐ€์ง€ ํ˜•ํƒœ๋กœ ํ‘œ์‹œ๋˜๋ฉฐ NOT NULL ์€ NULL๊ฐ’์„ ์ฒดํฌํ•˜๋Š” ์กฐ๊ฑด์œผ๋กœ ์ฒ˜๋ฆฌ๋˜๊ธฐ ๋•Œ๋ฌธ์— C๋กœ ํ‘œํ˜„๋œ๋‹ค.

     

     

    PRIMARY KEY - PK

     

    ์ปฌ๋Ÿผ์— ๊ธฐ๋ณธํ‚ค๋ฅผ ์ง€์ •ํ•˜๋ฉด ํ…Œ์ด๋ธ”์—์„œ ์‹๋ณ„ ๊ธฐ๋Šฅ์„ ๊ฐ–๊ฒŒ ๋œ๋‹ค. ํ…Œ์ด๋ธ”๋‹น ํ•˜๋‚˜์˜ ๊ธฐ๋ณธํ‚ค๋งŒ ๊ฐ€์งˆ ์ˆ˜ ์žˆ์œผ๋ฉฐ ๊ฐ’์€ ์œ ์ผํ•ด์•ผํ•˜๊ณ (UNIQUE) ๋„๊ฐ’์„ ๊ฐ€์งˆ ์ˆ˜ ์—†๋‹ค(NOT NULL). ๋ฌด์กฐ๊ฑด ์œ ์ผํ•œ ๊ฐ’์ด ๋“ค์–ด๊ฐ€์•ผ ํ•œ๋‹ค. ํ•˜๋‚˜์˜ ์ปฌ๋Ÿผ๋ฟ๋งŒ ์•„๋‹ˆ๋ผ ์—ฌ๋Ÿฌ์ปฌ๋Ÿผ(๋ณตํ•ฉ์ปฌ๋Ÿผ)์„ ๊ธฐ๋ณธํ‚ค๋กœ ๋ฌถ์„ ์ˆ˜ ์žˆ๋‹ค.

     

    -- ์ปฌ๋Ÿผ๋ ˆ๋ฒจ ๋ฐฉ์‹
    
    CREATE TABLE [์Šคํ‚ค๋งˆ].ํ…Œ์ด๋ธ”๋ช…
    ( ์ปฌ๋Ÿผ๋ช… ๋ฐ์ดํ„ฐํƒ€์ž… [CONSTRAINT ์ œ์•ฝ์กฐ๊ฑด๋ช…] PRIMARY KEY,
      ์ปฌ๋Ÿผ๋ช… ๋ฐ์ดํ„ฐํƒ€์ž…,
    ...
    );
    
    
    -- ํ…Œ์ด๋ธ” ๋ ˆ๋ฒจ ๋ฐฉ์‹
    
    CREATE TABLE [์Šคํ‚ค๋งˆ].ํ…Œ์ด๋ธ”๋ช…
    ( ์ปฌ๋Ÿผ๋ช… ๋ฐ์ดํ„ฐํƒ€์ž…,
      ์ปฌ๋Ÿผ๋ช… ๋ฐ์ดํ„ฐํƒ€์ž…,
    [CONSTRAINT ์ œ์•ฝ์กฐ๊ฑด๋ช…] PRIMARY KEY(์ปฌ๋Ÿผ๋ช…, ...)
    );
    
    -- PRIMARY ํ‚ค ๋‹ค์Œ์— ์–ด๋–ค ์ปฌ๋Ÿผ์ด ๊ธฐ๋ณธํ‚ค์— ํ•ด๋‹นํ•˜๋Š”์ง€ ๊ด„ํ˜ธ ์•ˆ์— ์จ์„œ ์•Œ๋ ค์ค˜์•ผํ•จ.

     

    ๊ธฐ๋ณธํ‚ค ์ œ์•ฝ์กฐ๊ฑด์„ ์ง€์ •ํ•˜๋ฉด ์ž๋™์œผ๋กœ UNIQUE INDEX๊ฐ€ ์„ค์ •๋˜์–ด์„œ ๊ธฐ๋ณธํ‚ค๋ฅผ ์ด์šฉํ•œ ๋ฐ์ดํ„ฐ ๊ฒ€์ƒ‰์ด ๋น ๋ฅด๋‹ค.

    ์ œ์•ฝ์กฐ๊ฑด๋ช…์€ ์‹๋ณ„๊ฐ€๋Šฅํ•˜๊ฒŒ, ์ค‘๋ณต๋˜์ง€ ์•Š๊ฒŒ ์ž˜ ์ ์œผ๋ฉด ๋˜๋Š”๋ฐ ๋ณดํ†ต 'ํ…Œ์ด๋ธ”๋ช…_์ปฌ๋Ÿผ๋ช…_pk ํ˜•์‹์œผ๋กœ ์ง€์ •ํ•œ๋‹ค. CONSTRAINT ์ œ์•ฝ์กฐ๊ฑด๋ช…์„ ์ƒ๋žตํ•˜๋ฉด ์˜ค๋ผํด์—์„œ ์ž๋™์ ์œผ๋กœ SYS_ ํ˜•์‹์œผ๋กœ ๋งŒ๋“ค์–ด์ฃผ๋Š”๋ฐ ์ด๊ฑด ๋‚˜์ค‘์— ์•Œ์•„๋ณด๊ธฐ ๋ถˆํŽธํ•ด์ง€๊ธฐ ๋•Œ๋ฌธ์— ๋ช…์‹œํ•ด๋‘๋Š” ๊ฒŒ ์ข‹๋‹ค.

     

    -- ์ปฌ๋Ÿผ๋ ˆ๋ฒจ ๋ฐฉ์‹
    CREATE TABLE PK_TAB1(
    ID  NUMBER(2) CONSTRAINT PK_TAB1_ID_PK PRIMARY KEY,
    NAME VARCHAR2(10));
    
    
    -- ํ…Œ์ด๋ธ”๋ ˆ๋ฒจ ๋ฐฉ์‹
    CREATE TABLE PK_TAB2(
    ID  NUMBER(2),
    NAME    VARCHAR2(10),
    CONSTRAINT PK_TAB2_ID_PK PRIMARY KEY(ID));

     

     

    --์ปฌ๋Ÿผ๋ ˆ๋ฒจ๋ฐฉ์‹์œผ๋กœ dept ํ…Œ์ด๋ธ” ์ƒ์„ฑ
    
    CREATE TABLE DEPARTMENT
    (DEPTNO NUMBER(2) CONSTRAINT DEPARTMENT_DEPTNO_PK PRIMARY KEY,
    DNAME VARCHAR2(15),
    LOC VARCHAR2(15));
    
    
    -- ํ…Œ์ด๋ธ”๋ ˆ๋ฒจ ๋ฐฉ์‹
    
    CREATE TABLE DEPARTMENT2
    (DEPTNO NUMBER(2),
    DNAME VARCHAR2(15),
    LOC VARCHAR2(15),
    CONSTRAINT DEPARTMENT2_DEPTNO_PK PRIMARY KEY(DEPTNO)
    );
    
    
    -- ํ…Œ์ด๋ธ”๋ ˆ๋ฒจ๋กœ ๋ณตํ•ฉ์ปฌ๋Ÿผ์— ์ œ์•ฝ์กฐ๊ฑด ์ •์˜
    
    CREATE TABLE DEPARTMNET3
    (DEPTNO NUMBER(2),
    DNAME VARCHAR2(15),
    LOC VARCHAR2(15),
    CONSTRAINT DEPARTMENT3_DEPTNO_PK PRIMARY KEY(DEPTNO, LOC)
    _;
    
    
    -- ์ƒ์„ฑ๋œ ์ œ์•ฝ ์กฐ๊ฑด ํ™•์ธํ•˜๊ธฐ >> ๋ฐ์ดํ„ฐ ์‚ฌ์ „ ์กฐํšŒ
    
    SELECT *
    FROM USER_CONSTRAINTS
    WHERE table_name ='DEPARTMENT';

     

    ๋ฐ์ดํ„ฐ์‚ฌ์ „ ์กฐํšŒ ๊ฒฐ๊ณผ์—์„œ CONSTRAINT_TYPE ์ปฌ๋Ÿผ์„ ๋ณด๋ฉด P ๋ผ๊ณ  ํ‘œ์‹œ๋˜์–ด์žˆ๋‹ค.

    ๊ทธ๋Ÿฐ๋ฐ USER CONSTRAINTS ์‚ฌ์ „์—์„œ๋Š” ์–ด๋–ค ์ปฌ๋Ÿผ์— ์ œ์•ฝ์กฐ๊ฑด ๊ฑธ๋ ค์žˆ๋Š”์ง€ ์•Œ ์ˆ˜ ์—†๋‹ค. ์ด๋Ÿด ๋• USER_CONS_COLUMNS ๋ฐ์ดํ„ฐ์‚ฌ์ „ ํ…Œ์ด๋ธ”์„ ์‚ฌ์šฉํ•˜๋ฉด ๋œ๋‹ค.

     

    SELECT *
    FROM USER_CONS_COLUMNS
    WHERE table_name='DEPARTMENT';

     

    ์ด๊ฑธ๋กœ ํ•ด๋‹น column_name ์ปฌ๋Ÿผ์„ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋‹ค.

     

     

    NOT NULL (NN)

     

    ํ•ด๋‹น ์ปฌ๋Ÿผ์— ๋„๊ฐ’์ด ์ €์žฅ๋˜๋Š” ๊ฑธ ๋ฐฉ์ง€ํ•œ๋‹ค.

     

     

    NOT NULL ์ œ์•ฝ์กฐ๊ฑด์€ ์ปฌ๋Ÿผ๋ ˆ๋ฒจ์—์„œ๋งŒ ์ง€์ • ๊ฐ€๋Šฅํ•˜๋‹ค.

     

    ๊ธฐ๋ณธ์ ์œผ๋กœ ๋ชจ๋“  ์ปฌ๋Ÿผ์€ ๋„๊ฐ’์„ ํ—ˆ์šฉํ•œ๋‹ค. NOT NULL ์ œ์•ฝ์กฐ๊ฑด์€ ๋„๊ฐ’์„ ํ—ˆ์šฉํ•˜๋Š” ์ด ๊ธฐ๋ณธ๋™์ž‘์„ ์ˆ˜์ •ํ•˜๋Š” ๊ฒƒ์ด์ง€ ์ƒˆ๋กœ ์ถ”๊ฐ€ํ•˜๋Š” ๊ฒŒ ์•„๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ ์ œ์•ฝ์กฐ๊ฑด์„ ์ถ”๊ฐ€ํ•˜๋Š” ๊ฒƒ๊ณผ ๋™์ผํ•œ ํ…Œ์ด๋ธ”๋ ˆ๋ฒจ ๋ฐฉ์‹์œผ๋กœ๋Š” not null์„ ์ง€์ •ํ•  ์ˆ˜ ์—†๋‹ค. ๋‚˜๋จธ์ง€ 4๊ฐœ๋“ค์€ ๊ธฐ๋ณธ์ ์œผ๋กœ ์ปฌ๋Ÿผ์— ์—†๋˜ ์ƒˆ๋กœ์šด ์ œ์•ฝ์กฐ๊ฑด์„ ์ถ”๊ฐ€ํ•˜๋Š” ๊ฑฐ๋ผ ์ปฌ๋Ÿผ,ํ…Œ์ด๋ธ” ๋ ˆ๋ฒจ์—์„œ ๋ชจ๋‘ ์‚ฌ์šฉ๊ฐ€๋Šฅํ•˜๋‹ค.

     

    CREATE TABLE DEPARTMENT6
    (DEPTNO NUMBER(2) CONSTRAINT DEPARTMENT6_DEPTNO_PK PRIMARY KEY,
    DNAME VARCHAR2(15) CONSTRAINT DEPARTMENT6_DNAME_UK UNIQUE,
    LOC VARCHAR2(15) CONSTRAINT DEPARTMENT6_LOC_NN NOT NULL);
    
    -- ์ด์ œ LOC์— NULL ๊ฐ’์„ ์ €์žฅํ•˜๋ฉด ์—๋Ÿฌ๋‚œ๋‹ค.

     

     

    UNIQUE - UQ

     

    ์ค‘๋ณต๋ถˆ๊ฐ€ ์ œ์•ฝ์กฐ๊ฑด์„ ์ง€์ •ํ•œ๋‹ค. ๊ธฐ๋ณธํ‚ค(PK)์™€๋Š” ๋‹ค๋ฅด๊ฒŒ ๋„๊ฐ’์„ ํ—ˆ์šฉํ•˜๊ณ  ํ•œ ํ…Œ์ด๋ธ”์— ์œ ๋‹ˆํฌ ์ œ์•ฝ์กฐ๊ฑด์„ ์—ฌ๋Ÿฌ๊ฐœ ์ง€์ •ํ•  ์ˆ˜ ์žˆ๋‹ค.

    ๋ณตํ•ฉ์ปฌ๋Ÿผ ์ง€์ • ์‹œ ํ…Œ์ด๋ธ”๋ ˆ๋ฒจ๋งŒ ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•˜๋‹ค.

     

    -- ํ…Œ์ด๋ธ” ์ƒ์„ฑ
    
    
    CREATE TABLE UNI_TAB1 (
    DEPTNO NUMBER(2) CONSTRAINT UNI_TAB1_DEPTNO_UK UNIQUE,
    DNAME CHAR(14),
    LOC CHAR(13));
    
    -- ์ปฌ๋Ÿผ๋ ˆ๋ฒจ ์ œ์•ฝ์กฐ๊ฑด ์ง€์ •
    
    
    
    CREATE TABLE UNI_TAB2 (
    DEPTNO NUMBER(2),
    DNAME CHAR(14),
    LOC CHAR(13),
    CONSTRAINT UNI_TAB2_DEPTNO_UK UNIQUE (DEPTNO));
    
    -- ํ…Œ์ด๋ธ”๋ ˆ๋ฒจ ์ œ์•ฝ์กฐ๊ฑด ์ง€์ •
    
    
    
    -- ๋ฐ์ดํ„ฐ ์ž…๋ ฅ
    
    INSERT INTO UNI_TAB1
    VALUES(1, 'A', 'A');
    
    SELECT * FROM UNI_TAB1;
    
    
    INSERT INTO UNI_TAB2
    VALUES (NULL, 'A', 'A');  -- NULL๊ฐ’ ์ถœ๋ ฅ
    
    SELECT * FROM UNI_TAB2;

     

     

    --์ปฌ๋Ÿผ๋ ˆ๋ฒจ ์œ ๋‹ˆํฌ ์ •์˜
    CREATE TABLE DEPARTMENT4
    (DEPTNO NUMBER(2) CONSTRAINT DEPARTMENT4_DEPTNO_PK PRIMARY KEY,
    DNAME VARCHAR2(15) CONSTRAINT DEPARTMENT4_DNAME_UK UNIQUE,
    LOC VARCHAR2(15));
    
    
    INSERT INTO DEPARTMENT4 (DEPTNO, DNAME, LOC)
    VALUES (30, NULL, '์„œ์šธ');
    
    
    SELECT * FROM DEPARTMENT4;
    
    
    -- ํ…Œ์ด๋ธ”๋ ˆ๋ฒจ ์œ ๋‹ˆํฌ ์ •์˜
    CREATE TABLE DEPARTMENT5
    (DEPTNO NUMBER(2) CONSTRAINT DEPARTMENT5_DEPTNO_PK PRIMARY KEY,
    DNAME VARCHAR2(15),
    LOC VARCHAR2(15),
    CONSTRAINT DEPARTMENT5_DNAME_UK UNIQUE(DNAME));
    

     

    CREATE TABLE SAWON_2 (
    S_NO NUMBER(2),
    S_NAME VARCHAR2(10) NOT NULL,
    S_EMAIL VARCHAR2(20) CONSTRAINT SAWON_S_EMAIL_UK UNIQUE);  -- ์ปฌ๋Ÿผ๋ ˆ๋ฒจ
    
    
    INSERT INTO SAWON_2 VALUES(2, '๊น€์ˆ˜ํ˜„', 'kim@ooo.com');
    
    
    SELECT * FROM SAWON_2;
    
    
    CREATE TABLE SAWON_3
    (S_NO NUMBER(2),
    S_NAME VARCHAR2(10) NOT NULL,
    S_EMAIL VARCHAR2(20),
    CONSTRAINT SAWON_3_S_EMAIL_UK UNIQUE (S_EMAIL));  -- ํ…Œ์ด๋ธ”๋ ˆ๋ฒจ

     

     

    CHECK - CK

     

    ์กฐ๊ฑด๊ณผ ์ผ์น˜ํ•˜๋Š” ๋ฐ์ดํ„ฐ๋งŒ ์ €์žฅํ•˜๋Š” ์ œ์•ฝ์กฐ๊ฑด. '์ด๊ฒƒ๋งŒ ์ž…๋ ฅํ•ด๋ผ'

    CHECK ๋‹ค์Œ ๊ด„ํ˜ธ ์•ˆ์—๋Š” ์กฐ๊ฑด์‹์ด ๋“ค์–ด๊ฐ„๋‹ค.

    IN์—ฐ์‚ฐ์ž, AND/OR, ๋น„๊ต์—ฐ์‚ฐ์ž์™€ ํ•จ๊ป˜ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค.

     

    -- ์ปฌ๋Ÿผ๋ ˆ๋ฒจ
    CREATE TABLE DEPARTMENT7
    (DEPTNO NUMBER(2),
    DNAME VARCHAR2(15) CONSTRAINT DEPARTMENT7_DNAME_CK CHECK(DNAME IN('๊ฐœ๋ฐœ', '์ธ์‚ฌ')),
    LOC VARCHAR2(15));
    
    
    -- ํ…Œ์ด๋ธ”๋ ˆ๋ฒจ
    CREATE TABLE DEPARTMENT8
    (DEPTNO NUMBER(2),
    DNAME VARCHAR2(15),
    LOC VARCHAR2(15),
    CONSTRAINT DEPARTMENT8_DNAME_CK CHECK(DNAME IN ('๊ฐœ๋ฐœ', '์ธ์‚ฌ'))
    );

     

    DNAME ์ปฌ๋Ÿผ ์ œ์•ฝ์กฐ๊ฑด์„ '๊ฐœ๋ฐœ', '์ธ์‚ฌ' ๋‘˜ ์ค‘ ํ•˜๋‚˜๋งŒ ์ž…๋ ฅ ๊ฐ€๋Šฅํ•˜๊ฒŒ ์„ค์ •ํ–ˆ๋‹ค.

     

     

    FOREIGN KEY - FK

     

    ํ•ด๋‹น ํ…Œ์ด๋ธ”์—์„œ ๋‹ค๋ฅธ ํ…Œ์ด๋ธ”์˜ ๋ฐ์ดํ„ฐ๋ฅผ ์ฐธ์กฐํ•  ๋•Œ ์˜ฌ๋ฐ”๋ฅธ ๊ฐ’๋งŒ ์ฐธ์กฐํ•˜๋„๋ก ์ œ์•ฝํ•œ๋‹ค.

    ์ด ํ‚ค์— ๋Œ€ํ•œ ์ž๋ฃŒ๋Š” ๋‹ค๋ฅธ ํ…Œ์ด๋ธ”์— ์žˆ๋‹ค๋Š” ๋œป์—์„œ ์™ธ๋ž˜ํ‚ค ๋˜๋Š” ์ฐธ์กฐํ‚ค๋ผ๊ณ  ๋ถ€๋ฅธ๋‹ค.

     

    EMP๊ฐ€ DEPT์—์„œ ๋ถ€์„œ๋ฒˆํ˜ธ๋กœ ์ž๋ฃŒ๋ฅผ ์ฐธ์กฐํ•ด์˜จ๋‹ค(์ฐธ๊ณ ํ•ด์„œ ์ฐพ์•„์˜จ๋‹ค).

    ์ •๋ณด๋ฅผ ์ฃผ๋Š” ์• ๋ฅผ ๋ถ€๋ชจํ…Œ์ด๋ธ”, ์ •๋ณด๋ฅผ ๊บผ๋‚ด์“ฐ๋Š” ์• ๋ฅผ ์ž์‹ํ…Œ์ด๋ธ”์ด๋ผ ํ•˜๋Š”๋ฐ,

    ๋ถ€์„œ๋ฒˆํ˜ธ์— ํ•ด๋‹นํ•˜๋Š” ์ •๋ณด๋ฅผ ์ฃผ๋Š” DEPT๊ฐ€ ๋ถ€๋ชจํ…Œ์ด๋ธ”์ด ๋œ๋‹ค.

    ์—ฌ๊ธฐ์„œ FOREIGN KEY๋Š” ์ž์‹์—์„œ ๋ถ€๋ชจ๋ฅผ ์ฐธ์กฐํ• ๋•Œ ์‚ฌ์šฉํ•œ๋‹ค.

    ์™ธ๋ž˜ํ‚ค๊ฐ€ ์ฐธ์กฐํ•˜๋Š” ๋ถ€๋ชจํ…Œ์ด๋ธ”์˜ ์ปฌ๋Ÿผ๊ฐ’์€ ์ค‘๋ณต๋˜๋ฉด ์•ˆ๋˜๋‹ˆ๊นŒ ๊ธฐ๋ณธํ‚ค๋กœ ์ง€์ •๋˜์–ด์•ผ ํ•œ๋‹ค.

    ์ด ์™ธ๋ž˜ํ‚ค๋Š” ๊ธฐ๋ณธํ‚ค๊ฐ€ ๊ฐ–๊ณ ์žˆ๋Š” ๋ฒˆํ˜ธ๋ฅผ ๊ฐ–๊ฑฐ๋‚˜ NULL๊ฐ’๋งŒ ๊ฐ€์งˆ ์ˆ˜ ์žˆ๋‹ค.

     

    -- ๋‘ ๋ฐฉ์‹ ์Šคํƒ€์ผ์ด ๋‹ค๋ฅด๋‹ˆ๊นŒ ์‚ฌ์šฉ์‹œ ํ—ท๊ฐˆ๋ฆฌ์ง€ ์•Š๊ฒŒ ์ฃผ์˜
    
    -- ์ปฌ๋Ÿผ๋ ˆ๋ฒจ 
    
    CREATE TABLE [์Šคํ‚ค๋งˆ].ํ…Œ์ด๋ธ”๋ช…
    (์ปฌ๋Ÿผ๋ช… ๋ฐ์ดํ„ฐํƒ€์ž… [CONSTRAINT ์ œ์•ฝ์กฐ๊ฑด๋ช…] REFERENCES ๋ถ€๋ชจํ…Œ์ด๋ธ”๋ช…(์ปฌ๋Ÿผ๋ช…)
    ์ปฌ๋Ÿผ๋ช… ๋ฐ์ดํ„ฐํƒ€์ž…,
    ...
    );
    
    
    -- ํ…Œ์ด๋ธ”๋ ˆ๋ฒจ
    CREATE TABLE [์Šคํ‚ค๋งˆ].ํ…Œ์ด๋ธ”๋ช…
    (์ปฌ๋Ÿผ๋ช… ๋ฐ์ดํ„ฐํƒ€์ž…,
    ์ปฌ๋Ÿผ๋ช… ๋ฐ์ดํ„ฐํƒ€์ž…,
    ...
     [CONSTRAINT ์ œ์•ฝ์กฐ๊ฑด๋ช…] FOREIGN KEY(์ปฌ๋Ÿผ๋ช…)
    REFERENCES ๋ถ€๋ชจํ…Œ์ด๋ธ”๋ช…(์ปฌ๋Ÿผ๋ช…)
    );

     

    ์ปฌ๋Ÿผ๋ ˆ๋ฒจ์€ ์ œ์•ฝ์กฐ๊ฑด ์ง€์ • ์‹œ REFERENCES(์ฐธ์กฐ) ํ‚ค์›Œ๋“œ๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค. ์ฐธ์กฐํ•˜๋Š” ๋ถ€๋ชจํ…Œ์ด๋ธ”์˜ ์ปฌ๋Ÿผ์€ ๋ฐ˜๋“œ์‹œ ๊ธฐ๋ณธํ‚ค๋‚˜ ์œ ๋‹ˆํฌ๋กœ ์ œ์•ฝ์กฐ๊ฑด์ด ์„ค์ •๋œ ์ปฌ๋Ÿผ์ด์–ด์•ผ ํ•œ๋‹ค.

     

    -- DEPTNO ์ปฌ๋Ÿผ์„ ๊ธฐ๋ณธํ‚ค๋กœ ์„ค์ •ํ•˜๋Š” ๋ถ€๋ชจํ…Œ์ด๋ธ” ์ƒ์„ฑ
    
    CREATE TABLE DEPT02
    (DEPTNO NUMBER(2) CONSTRAINT DEPT02_DEPTNO_PK PRIMARY KEY,
    DNAME VARCHAR2(15),
    LOC VARCHAR2(15)
    );
    
    
    INSERT INTO DEPT02 (DEPTNO,DNAME,LOC) VALUES (10,'์ธ์‚ฌ', '์„œ์šธ');
    INSERT INTO DEPT02 (DEPTNO,DNAME,LOC) VALUES (20,'๊ฐœ๋ฐœ', '๊ด‘์ฃผ');
    INSERT INTO DEPT02 (DEPTNO,DNAME,LOC) VALUES (30,'๊ด€๋ฆฌ', '๋ถ€์‚ฐ');
    INSERT INTO DEPT02 (DEPTNO,DNAME,LOC) VALUES (40,'์˜์—…', '๊ฒฝ๊ธฐ');
    commit;
    
    
    -- ์œ„์˜ DEPTNO ์ปฌ๋Ÿผ์„ ์ฐธ์กฐํ•˜๋Š” ์™ธ๋ž˜ํ‚ค๋ฅผ ๊ฐ–๋Š” ์ž์‹ํ…Œ์ด๋ธ” ์ƒ์„ฑ
    
    CREATE TABLE EMP02
    (EMPNO NUMBER(4) CONSTRAINT EMP02_EMPNO_PK PRIMARY KEY,
    ENAME VARCHAR2(15),
    DEPTNO NUMBER(2) CONSTRAINT EMP02_DEPTNO_FK REFERENCES DEPT02(DEPTNO));
    
    
    INSERT INTO EMP02 (EMPNO, ENAME, DEPTNO) VALUES (1000,'JOHN', 10);
    INSERT INTO EMP02 (EMPNO, ENAME, DEPTNO) VALUES (2000,'AWGDN', 20);
    INSERT INTO EMP02 (EMPNO, ENAME, DEPTNO) VALUES (3000,'BDDGF', NULL);
    INSERT INTO EMP02 (EMPNO, ENAME, DEPTNO) VALUES (4000,'WSEF', 50); --๋ฌด๊ฒฐ์„ฑ ์ œ์•ฝ์กฐ๊ฑด ์œ„๋ฐฐ ์—๋Ÿฌ
    commit;
    
    
    -- ์ œ์•ฝ์กฐ๊ฑด ํ™•์ธ
    
    SELECT TABLE_NAME, CONSTRAINT_TYPE,
    CONSTRAINT_NAME, R_CONSTRAINT_NAME
    FROM USER_CONSTRAINTS
    WHERE TABLE_NAME IN('DEPT02', 'EMP02');
    
    
    
    -- DEPT02์˜ DEPTNO๋ฅผ ์ฐธ์กฐํ•˜๋Š” ์™ธ๋ž˜ํ‚ค๋ฅผ ๊ฐ–๋Š” EMP03์„ ์ƒ์„ฑ
    
    CREATE TABLE EMP03
    (EMPNO NUMBER(4) CONSTRAINT EMP03_EMPNO_PK PRIMARY KEY,
    ENAME VARCHAR2(15),
    DEPTNO NUMBER(2),
    CONSTRAINT EMP03_DEPTNO_FK FOREIGN KEY(DEPTNO)
    REFERENCES DEPT02(DEPTNO));
    
    
    INSERT INTO EMP03 (EMPNO, ENAME, DEPTNO) VALUES (1000,'JOHN', 10);
    INSERT INTO EMP03 (EMPNO, ENAME, DEPTNO) VALUES (2000,'AWGDN', 20);
    INSERT INTO EMP03 (EMPNO, ENAME, DEPTNO) VALUES (3000,'BDDGF', NULL);
    INSERT INTO EMP03 (EMPNO, ENAME, DEPTNO) VALUES (4000,'WSEF', 50); -- errr
    commit;
    
    
    -- ์ œ์•ฝ์กฐ๊ฑด ํ™•์ธ
    
    SELECT TABLE_NAME, CONSTRAINT_TYPE,
    CONSTRAINT_NAME, R_CONSTRAINT_NAME
    FROM USER_CONSTRAINTS
    WHERE TABLE_NAME IN('DEPT02', 'EMP02','EMP03');

     

     

    ์™ธ๋ž˜ํ‚ค ์ œ์•ฝ์กฐ๊ฑด์˜ ์ถ”๊ฐ€์˜ต์…˜

     

    ๋ถ€๋ชจํ…Œ์ด๋ธ”์˜ ํ–‰ ์‚ญ์ œ์‹œ ๋ฌธ์ œ๋  ์ˆ˜ ์žˆ๋Š” ์ž์‹ํ…Œ์ด๋ธ”์˜ ํ–‰ ์„ค์ •๋ฐฉ๋ฒ•.

    ๋ถ€๋ชจํ…Œ์ด๋ธ”์—์„œ ๋ญ˜ ์‚ญ์ œํ•˜๋ฉด ์—ฌ๊ธฐ๋ฅผ ์ฐธ์กฐํ•˜๊ณ  ์žˆ๋Š” ์ž์‹ํ…Œ์ด๋ธ”์— ๋ฌธ์ œ๊ฐ€ ์ƒ๊ธด๋‹ค. ์ด๋Ÿฐ ์ข…์†์ ์ธ ์ƒํ™ฉ์—์„œ ํ•ด๊ฒฐ ๊ฐ€๋Šฅํ•œ ๋ฐฉ๋ฒ•์€ ๋ฌด์—‡์ด ์žˆ์„๊นŒ?

     

    1) ON DELETE CASCADE

    ๋ถ€๋ชจ ํ…Œ์ด๋ธ”์˜ ํ–‰์ด ์‚ญ์ œ๋˜๋ฉด ํ•ด๋‹น ํ–‰์„ ์ฐธ์กฐํ•˜๋Š” ์ž์‹ํ…Œ์ด๋ธ”์˜ ํ–‰๋„ ๊ฐ™์ด ์‚ญ์ œํ•˜๋Š” ๋ฐฉ๋ฒ•.

     

    CREATE TABLE EMP02
    (EMPNO NUMBER(4) CONSTRAINT EMP02_EMPNO_PK PRIMARY KEY,
    ENAME VARCHAR2(15), DEPTNO NUMBER(2)
    CONSTRAINT EMP02_DEPTNO_FK REFERENCES DEPT02(DEPTNO) ON DELETE CASCADE);

     

    2) ON DELETE SET NULL

    ๋ถ€๋ชจํ…Œ์ด๋ธ”์˜ ํ–‰์ด ์‚ญ์ œ๋˜๋ฉด ํ•ด๋‹น ํ–‰์„ ์ฐธ์กฐํ•˜๋Š” ์ž์‹ํ…Œ์ด๋ธ”์˜ ์ปฌ๋Ÿผ๊ฐ’์„ NULL๋กœ ์„ค์ •ํ•˜๋Š” ๋ฐฉ๋ฒ•.

     

    CREATE TABLE EMP02
    (EMPNO NUMBER(4) CONSTRAINT EMP02_EMPNO_PK PRIMARY KEY,
    ENAME VARCHAR2(15), DEPTNO NUMBER(2)
    CONSTRAINT EMP02_DEPTNO_FK REFERENCES DEPT02(DEPTNO) ON DELETE SET NULL);

     

     

     

    ํ…Œ์ด๋ธ” ์‚ญ์ œ DROP

     

    DROP TABLE ํ…Œ์ด๋ธ”์ด๋ฆ„;

     

    ํ…Œ์ด๋ธ”์— ์ €์žฅ๋œ ๋ชจ๋“  ๋ฐ์ดํ„ฐ์™€ ๊ด€๋ จ ์ธ๋ฑ์Šค, ์ œ์•ฝ์กฐ๊ฑด(FK์ œ์™ธ)์ด ์‚ญ์ œ๋œ๋‹ค.

    ์ฐธ์กฐํ‚ค๋Š” ์ž๋™์œผ๋กœ ์‚ญ์ œ๋˜์ง€ ์•Š๊ธฐ ๋•Œ๋ฌธ์— ์ฐธ์กฐ๋˜๋Š” ์ƒํ™ฉ์ด๋ผ๋ฉด CASCADE CONSTRAINTS ์˜ต์…˜์„ ์ง€์ •ํ•ด์ฃผ์–ด์•ผ ํ•œ๋‹ค.

     

     

     

    ํ…Œ์ด๋ธ” ์ด๋ฆ„ ๋ณ€๊ฒฝ RENAME

     

    RENAME ์˜ˆ์ „์ด๋ฆ„ TO ์ƒˆ์ด๋ฆ„;

     

     

     

    ํ…Œ์ด๋ธ” ์ž˜๋ผ๋‚ด๊ธฐ TRUNCATE

     

    TRUNCATE TABLE ํ…Œ์ด๋ธ”๋ช…;

     

    ํ…Œ์ด๋ธ”์„ ์‚ญ์ œํ•  ๊ฒฝ์šฐ ๊ทธ๊ฑธ ๋‹ด์•„๋†จ๋˜ ์ €์žฅ๊ณต๊ฐ„์€ ๊ทธ๋Œ€๋กœ ์กด์žฌํ•œ๋‹ค. ๋กค๋ฐฑ ๋ณต๊ตฌ๋ฅผ ์œ„ํ•ด์„œ!

    DELETE๋ช…๋ น์€ ์ €์žฅ๊ณต๊ฐ„์„ ๋‚จ๊ฒจ๋‘๋Š”๋ฐ,  TRUNCATE๋Š” ๊ทธ ๊ณต๊ฐ„๊นŒ์ง€ ์™„์ „ ์‚ญ์ œํ•ด๋ฒ„๋ฆฌ๊ธฐ ๋•Œ๋ฌธ์— ๋กค๋ฐฑ์ด ๋ถˆ๊ฐ€๋Šฅํ•˜๋‹ค.

    ๊ทธ๋ž˜์„œ ๋กค๋ฐฑ ์ •๋ณด๋ฅผ ๋ฐœ์ƒํ•˜์ง€ ์•Š๊ธฐ ๋•Œ๋ฌธ์— DELETE๋ณด๋‹ค ์ˆ˜ํ–‰์†๋„๊ฐ€ ๋น ๋ฅด๋‹ค.

     

     

    FLASHBACK DROP

     

    FLASHBACK TABLE ํ…Œ์ด๋ธ”๋ช… TO BEFORE DROP;

     

    ์‚ญ์ œ๋œ ํ…Œ์ด๋ธ” ๋ณต๊ตฌํ•˜๋Š” ๋ช…๋ น์–ด.

    ์ผ๋‹จ ํ…Œ์ด๋ธ”์„ ๋“œ๋žํ•˜๋ฉด RECYCLEBIN์ด๋ผ๋Š” ํŠน๋ณ„ํ•œ ๊ฐ์ฒด์— BIN$์œผ๋กœ ์‹œ์ž‘ํ•˜๋Š” ์ด๋ฆ„์œผ๋กœ ์ €์žฅ๋œ๋‹ค. ์ด์ œ ์—ฌ๊ธฐ์„œ ๋‹ค์‹œ ๋ณต๊ตฌ์‹œํ‚ฌ ์ˆ˜ ์žˆ๋‹ค.

     

    SHOW RECYCLEBIN  >>  ๊ทธ ํœด์ง€ํ†ต ๊ฐ์ฒด์— ๋‹ด๊ธด ์ •๋ณด ์กฐํšŒ

     

    PURGE RECYCLEBIN >> ํœด์ง€ํ†ต ๋น„์šฐ๊ธฐ

     

    DROP TABLE ํ…Œ์ด๋ธ”๋ช… PURGE ํ…Œ์ด๋ธ” ์™„์ „ ์‚ญ์ œ(๋ณต๊ตฌ๋ถˆ๊ฐ€)

     

     

     

    ํ…Œ์ด๋ธ” ๋ณ€๊ฒฝ ALTER

     

    ์ƒ์„ฑ๋œ ํ…Œ์ด๋ธ”์— ๋Œ€ํ•œ ๊ตฌ์กฐ๋ฅผ ๋ณ€๊ฒฝํ•œ๋‹ค.

     

    ์ปฌ๋Ÿผ์ถ”๊ฐ€

     

    ALTER TABLE ํ…Œ์ด๋ธ”๋ช…
    ADD (์ปฌ๋Ÿผ ๋ฐ์ดํƒ€ํƒ€์ž… [DEFAULT]);

     

    ALTER TABLE EMP04
    ADD (EMAIL VARCHAR2(10), ADDRESS VARCHAR2(20));
    
    -- ์ด๋ฉ”์ผ๊ณผ ์ฃผ์†Œ ์ปฌ๋Ÿผ์„ ์ถ”๊ฐ€
    -- ์ž๋™์œผ๋กœ ๋„๊ฐ’์œผ๋กœ ์ €์žฅ๋จ

     

     

    ์ปฌ๋Ÿผ๋ณ€๊ฒฝ

     

    ALTER TABLE ํ…Œ์ด๋ธ”๋ช…
    MODIFY (์ปฌ๋Ÿผ ๋ฐ์ดํƒ€ํƒ€์ž… [DEFAULT]);

     

    ์ปฌ๋Ÿผ์˜ ๋ฐ์ดํ„ฐํƒ€์ž…๊ณผ ํฌ๊ธฐ, DEFAULT๊ฐ’์„ ๋ณ€๊ฒฝํ• ์ˆ˜์žˆ๋‹ค

     

    ALTER TABLE EMP04
    MODIFY (EMAIL VARCHAR2(40));

     

    ๋ฐ์ดํ„ฐํƒ€์ž…์„ ๋ณ€๊ฒฝํ•˜๊ฑฐ๋‚˜ ์ปฌ๋Ÿผ์˜ ๊ธธ์ด๋ฅผ ์ฆ๊ฐ€ ๋˜๋Š” ์ถ•์†Œํ•˜๋Š” ๊ฒฝ์šฐ์—๋Š” ๋ชจ๋“  ํ–‰์˜ ์ปฌ๋Ÿผ์ด NULL์ด๊ฑฐ๋‚˜ ํ–‰์ด ์—†๋Š” ๊ฒฝ์šฐ์—๋งŒ ๊ฐ€๋Šฅํ•˜๋‹ค.

     

     

    ์ปฌ๋Ÿผ์ด๋ฆ„ ๋ณ€๊ฒฝ

     

    ALTER TABLE ํ…Œ์ด๋ธ”๋ช…
    RENAME COLUMN ์›๋ž˜์ด๋ฆ„ TO ์ƒˆ ์ด๋ฆ„;

     

     

    ์ปฌ๋Ÿผ์‚ญ์ œ

     

    ALTER TABLE ํ…Œ์ด๋ธ”๋ช…
    DROP(์ปฌ๋Ÿผ);

     

    ALTER TABLE EMP04
    DROP (EMAIL);

     

     

    ์ œ์•ฝ์กฐ๊ฑด ์ถ”๊ฐ€

     

    ALTER TABLE ํ…Œ์ด๋ธ”
    ADD [CONSTRAINT ์ œ์•ฝ์กฐ๊ฑด๋ช…] ์ œ์•ฝ์กฐ๊ฑดํƒ€์ž…(์ปฌ๋Ÿผ๋ช…);

     

    NOT NULL ์ œ์•ฝ์กฐ๊ฑด์€ ALTER TABLE MODIFY๋ฌธ(์ปฌ๋Ÿผ๋ ˆ๋ฒจ)์„ ์‚ฌ์šฉํ•œ๋‹ค.

     

    CREATE TABLE DEPT03
    (DEPTNO NUMBER(2),
    DNAME VARCHAR2(15),
    LOC VARCHAR2(15));
    
    
    -- ์ƒ์„ฑ๋˜์–ด ์žˆ๋Š” ํ…Œ์ด๋ธ”์— ๊ธฐ๋ณธํ‚ค ์ œ์•ฝ์กฐ๊ฑด์„ ์ถ”๊ฐ€ํ•œ๋‹ค.
    ALTER TABLE DEPT03
    ADD CONSTRAINT DEPT03_DEPTNO_PK PRIMARY KEY(DEPTNO);
    
    -- ํ…Œ์ด๋ธ”์— NOT NULL ์ œ์•ฝ์กฐ๊ฑด์„ ์ถ”๊ฐ€ํ•œ๋‹ค.
    ALTER TABLE DEPT03
    MODIFY(DNAME VARCHAR(15) CONSTRAINT DEPT03_DNAME_NN NOT NULL);

     

     

    ์ œ์•ฝ์กฐ๊ฑด ์‚ญ์ œ

     

    ALTER TABLE ํ…Œ์ด๋ธ”๋ช…
    DROP PRIMARY KEY | UNIQUE(์ปฌ๋Ÿผ)| CONSTRAINT ์ œ์•ฝ์กฐ๊ฑด๋ช… [CASCADE];

     

    ALTER TABLE DEPT03
    DROP PRIMARY KEY;
    
    
    ALTER TABLE DEPT03
    DROP CONSTRAINT DEPT03_DEPTNO_PK;
    
    
    ALTER TABLE DEPT03
    DROP CONSTRAINT DEPT03_DNAME_NN;
    
    
    ALTER TABLE DEPT05
    DROP PRIMARY KEY CASCADE;

     

    PRIMARY KEY ๋˜๋Š” UNIQUE๋Š” CONSTRAINT ์ œ์•ฝ์กฐ๊ฑด๋ช… ์—†์ด ํ‚ค์›Œ๋“œ๋งŒ ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•˜๋‹ค. ๋‚˜๋จธ์ง€ ์ œ์•ฝ์กฐ๊ฑด์€ ์ œ์•ฝ์กฐ๊ฑด๋ช…์„ ๋ช…์‹œํ•ด์„œ ์‚ญ์ œํ•œ๋‹ค. ์ข…์† ์ƒํƒœ์ผ ๊ฒฝ์šฐ์—” CASCADE ์˜ต์…˜์„ ์‚ฌ์šฉํ•œ๋‹ค.

     

     

    ์ œ์•ฝ์กฐ๊ฑด ํ™œ์„ฑํ™” / ๋น„ํ™œ์„ฑํ™”

     

    ALTER TABLE ํ…Œ์ด๋ธ”๋ช…
    DISABLE|ENABLE CONSTRAINT ์ œ์•ฝ์กฐ๊ฑด๋ช… [CASCADE];
    
    
    -- ๋ฐ์ดํ„ฐ ์‚ฌ์ „์˜ STATUS ์ปฌ๋Ÿผ์—์„œ ์ œ์•ฝ์กฐ๊ฑด ํ™œ์„ฑํ™” ์ƒํƒœ๋ฅผ ๋ณผ ์ˆ˜ ์žˆ๋‹ค.
    SELECT TABLE_NAME, CONSTRAINT_TYPE, CONSTRAINT_NAME, STATUS
    FROM USER_CONSTRAINTS
    WHERE TABLE_NAME IN ('ํ…Œ์ด๋ธ”๋ช…');

     

    ๋ฐ์ดํ„ฐ์˜ ์ €์žฅ์„ฑ๋Šฅ ํ–ฅ์ƒ์„ ์œ„ํ•ด ์ œ์•ฝ์กฐ๊ฑด์„ ON/ OFF ํ•  ์ˆ˜ ์žˆ๋‹ค.

     

     

     

    ๐Ÿ˜œ NEXT : SQL ๋ทฐ, ์‹œํ€€์Šค, ์ธ๋ฑ์Šค ๊ฐ์ฒด์™€ ์‚ฌ์šฉ์ž ๊ด€๋ฆฌ ๊ณต๋ถ€ํ•˜๊ธฐ

    ๋ฐ˜์‘ํ˜•

    ๋Œ“๊ธ€

๊ฐœ๋ฐœ๊ณต๋ถ€