ORACLE_Primary Key, Unique Key, Not Null
- 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)
*/