BackEnd/DB

ORACLE_Primary Key, Unique Key, Not Null

telecaster0 2021. 5. 23. 19:36

- CONSTRAINTS :: 제약조건 :: 테이블에 데이터를 입력하거나 수정하거나 삭제할 때 작동 
                             Coloumn에 적용
                             제약조건은 수정이 불가  --> 삭제 후 생성해야함.
-  DML(DATA MANIPULATION LANGUAGE)  :  INSERT, UPDATE, DELETE
   

CREATE TABLE [TABLE NAME] (



[COLUMN NAME]     [DATA TYPE]     [ATTRIBUTE]

             .                               .                            .           

[COLUMN NAME]     [DATA TYPE]     [ATTRIBUTE]

);

------------------------------------------------------------------

 

 

학원에서 진행할 실질적 예제, Test용 Table

 

CREATE TABLE TEST( -->table을 users파일에 넣으라는 뜻.

COLI NCHAR (1)

) TABLESPACE USERS;

 

 

-------------------------------------------------------------------


   
   
   1. PRIMARY KEY(P, PK) : 테이블에  하나만 존재
       = UNIQUE + NN(Not Null)     : 수많은 레코드 중 하나의 레코드를 나타내는 유일한 값


   2. UNIQUE(U, UK)      : 테이블에 여러개의 Column에 적용 가능
                         : 값이 있는 수많은 레코드 중 하나의 레코드를 나타내는 유일한 값


   3. NOT NULL(NN)       : 특정 Column의 값은 NULL이어서는 안된다.   --> (ATTRIBUTE)
   4. DEFAULT            : 특정 컬럼의 값이 지정되지 않은 경우 미리 설정된 기본값으로 대체 --> (ATTRIBUTE)
   5. CHECK              : 특정 컬럼 값의 입력 범위를 지정.   CHECK (나이 >= 30)

 


   6. FOREIGN KEY        : 특정 컬럼의 값을 입력, 수정, 삭제 시 참조 테이블의 데이터 
                           유무를 확인하여 참조 테이블의 데이터가 있는 경우만 허용.

PRIMARY KEY=부모KEY   -    FOREIGN KEY = 자식KEY(외부 KEY)
                            

CREATE TABLE PKTEST(
 COL1   NCHAR(1),
 COL2   NVARCHAR2(10)
);



-- INSERT : 데이터값을 삽입

INSERT INTO HOON.PKTEST(COL1, COL2) VALUES('A', '에이');


-- 중복 데이터 입력 : 
INSERT INTO HOON.PKTEST(COL1, COL2) VALUES('A', '에이');
INSERT INTO HOON.PKTEST(COL1, COL2) VALUES('A', '에에이');
ROLLBACK;

 


-- PRIMARY KEY 적용
ALTER TABLE HOON.PKTEST
ADD CONSTRAINT PT_COL1_PK(PK 변수?이름)  PRIMARY KEY(COL1);

-- INSERT
INSERT INTO HOON.PKTEST(COL1, COL2) VALUES('A', '에이');

 


-- 중복 데이터 입력
INSERT INTO HOON.PKTEST(COL1, COL2) VALUES('A', '에이');  --> X
INSERT INTO HOON.PKTEST(COL1, COL2) VALUES('B', '에이');  --> O
INSERT INTO HOON.PKTEST(COL1, COL2) VALUES('C', NULL);  --> O
INSERT INTO HOON.PKTEST(COL1, COL2) VALUES(DEFAULT, 'NONE');  --> X

-- PK삭제
ALTER TABLE HOON.PKTEST
DROP CONSTRAINT PT_COL1_PK;

-- UNIQUE 생성
ALTER TABLE HOON.PKTEST
ADD CONSTRAINT PT_COL1_UK UNIQUE(COL1);


-- DATA
INSERT INTO HOON.PKTEST(COL1, COL2) VALUES(NULL, 'NONE');  --> O
INSERT INTO HOON.PKTEST(COL1, COL2) VALUES(NULL, 'NONE');
ROLLBACK;

-- NN(NOT NULL)
ALTER TABLE HOON.PKTEST
MODIFY COL1 NOT NULL;

 


-- DATA
INSERT INTO HOON.PKTEST(COL1, COL2) VALUES(NULL, 'NONE');

-- DEAULT
ALTER TABLE HOON.PKTEST
MODIFY COL1 DEFAULT '없음';

SELECT * FROM HOON.PKTEST;

 


-- TABLE 삭제
DROP TABLE HOON.PKTEST;

 

 

 

--DDL 뭔가 삭제하고 수정하는 부분 . 개체 집 만들고 개체 삭제 하는거

--DML 은 집의 구성원 통제하는거

--DROP ALTER = > DBA에서 한다. ALTER=수정

--1. PRIMARY KEY(P,Pk) : 테이블에 단 하나만 존재. (DB는 비교분석 하기떄문에 100개중에10개보다 100개중에 1개를 찾는게 빠름?효율적

--유일한 값. 중복 X

--프라이머리  NULL  (값이없으면 걍 빼버림. 아예 예외처리. 값이 있어야 함. 비교가 불가함!) 유니크 NULL은 인정! 값이없는것 그 자체로 인정해버림.

 

 

--CONSTRAINTS 제약조건 : 테이블에 데이터 생성하거나 그럴떄 제약조건을 건다. 수정불가. 삭제 후 재생성.

--NN은 그때그떄 수정이가능하도록 속성정의하는거임. NOT NULL=> NULL값 안들어감, PRIMARY,UNIQUE와 다르게 수정 가능.

--UNIQUE+NN은 속도느려짐 PRIMARY가 빠름!.

--DB쓰는 이유 중복되는 데이터를 한번만 쓰기위해.!

 

--부모의 PRIMARY KEY 는 자식의 TABLE에 전이(복제)   (EX. 상점코드 )

 

 

 

 

 

 

 



/* RESTAURANT RESERVATION SYSTEM */

/* A. FOODCATEGORY(FC) 
    PK  FC_CODE     NCHAR(1)  
    NN  FC_NAME     NVARCHAR2(100)
*/
CREATE TABLE FOODCATEGORY(
  FC_CODE   NCHAR(1),
  FC_NAME   NVARCHAR2(100)
)TABLESPACE USERS;

-- CONSTRAINTS
ALTER TABLE FOODCATEGORY
ADD CONSTRAINT FC_CODE_PK   PRIMARY KEY(FC_CODE)
MODIFY  FC_NAME NOT NULL;

-- SYNONYM >> PUBLIC SYNOYM, SYNONYM : FOODCATEGORY를 FC로 줄여부르기 위한 선언? 이라고 보면 될 것 같다.
CREATE PUBLIC SYNONYM   FC FOR HOONZZANG.FOODCATEGORY;

-- OBJECT PRIV :: SELECT, INSERT, UPDATE, DELETE, EXECUTE
GRANT ALL ON HOONZZANG.FOODCATEGORY TO HOON;

-- CHECK
SELECT * FROM FC;

/* E. RESTAURANT(RE)
    PK  RE_CODE     NCHAR(10)
    NN  RE_NAME     NVARCHAR2(100)
    NN  RE_CEO      NVARCHAR2(5)
    NN  RE_LOC      NVARCHAR2(100)
    FK  RE_CAT      NCHAR(1)
*/
CREATE TABLE RESTAURANT(
  RE_CODE       NCHAR(10),
  RE_NAME       NVARCHAR2(100),
  RE_CEO        NVARCHAR2(5),
  RE_LOC        NVARCHAR2(100),
  RE_CAT        NCHAR(1)
)TABLESPACE USERS;

-- CONSTRAINTS
  -- FK >> FOREIGN KEY(적용컬럼) REFERENCES HOONZZANG.FOODCATEGORY(참조 컬럼)

 


ALTER TABLE RESTAURANT
ADD CONSTRAINT RE_CODE_PK   PRIMARY KEY(RE_CODE)
ADD CONSTRAINT RE_CAT_FK    FOREIGN KEY(RE_CAT) REFERENCES HOONZZANG.FOODCATEGORY(FC_CODE)
MODIFY RE_NAME  NOT NULL
MODIFY RE_CEO   NOT NULL
MODIFY RE_LOC   NOT NULL;

-- SYNONYM
CREATE PUBLIC SYNONYM   RE FOR HOONZZANG.RESTAURANT;

 


-- GRANT 
GRANT ALL ON HOONZZANG(DBA 이름) .RESTAURANT TO HOON;

-- CHECK 
SELECT * FROM RE;


/* M. MENU(ME) 
    PK  ME_CODE     NCHAR(3)
    NN  ME_NAME     NVARCHAR2(100)
*/

/* MENUCHART(MC) 
   + RE :: RE_CODE
   + ME :: ME_CODE
   PK FK    MC_RECODE        NCHAR(10)
   PK FK    MC_MECODE        NCHAR(3)
   NN       MC_PRICE         NUMBER(6,0)
            MC_COMMENTS      NVARCHAR2(100)
*/