[DDL] 제약조건

sesame·2021년 8월 11일
0

sql

목록 보기
8/24

제약조건

테이블에 제약사항을 걸어 부적절한 데이터가 입력되는 것을 막는 목적으로 사용
데이터 무결성 유지!!

📌제약조건 확인

-- 유저가 소유한 모든 제약조건 조회
SELECT *
FROM USER_CONSTRAINTS;
---------------------------------
-- 컬럼에 할당된 제약조건 조회
SELECT *
FROM USER_CONS_COLUMNS;

1. CREATE TABLE 제약조건 생성

// 인라인 방법
CREATE TABLE store(
	prono NUMBER [CONSTRAINTS ~] PRIMARY KEY
    ,pname VARVHAR2(20) [CONSTRAINTS ~] NOT NULL
    ,price INT [CONSTRAINTS ~] NOT NULL
    ,kno NUMBER(2) [CONSTRAINTS ~] REFERENCES kind(kno)
);
------------------------------------------------------------
// 아웃라인 방법
CREATE TABLE store(
	prono NUMBER
    ,pname VARCHAR2(20) NOT NULL
    ,price INT NOT NULL
    ,kno NUMBER(2)
    ,[CONSTRAINTS ~] PRIMARY KEY(prono)
    ,[CONSTRAINTS ~] FOREIGN KEY(kno) REFERENCES kind(kno)
    , [CONSTRAINTS ~] UNIQUE (JOB)
    , [CONSTRAINTS ~] CHECK (GENDER IN (0,1))
);

👩‍👧ON DELETE CASCADE

부모테이블 PK 삭제시, 자식테이블의 PK컬럼의 '행(레코드)'도 따라 삭제

CREATE TABLE 테이블명 ( 
FK이름 NUMBER REFERENCES 부모테이블(PK이름) ON DELETE CASCADE
) ;

👩‍👧ON UPDATE CASCADE

-- oracle엔 이거 없다.....
부모 PK값이 수정시, 자식 테이블의 PK 컬럼의 값도 수정

CREATE TABLE 테이블명 ( 
FK이름 NUMBER REFERENCES 부모테이블(PK이름) ON UPDATE CASCADE
) ;

👩‍👧ON DELETE SET NULL

부모테이블 PK 삭제시, 자식테이블의 PK 컬럼 '값'이 NULL로 변경

CREATE TABLE 테이블명 ( 
FK이름 NUMBER REFERENCES 부모테이블(PK이름) ON DELETE SET NULL
) ;

2. 제약조건 ALTER로 추가

ARTER TABLE - ADD, RENAME, MODIFY(수정), DROP
새로운 컬럼은 테이블 맨뒤에, 원하는 위치에 컬럼 지정 추가 불가능

  • 컬럼
--ADD - 컬럼 추가
ALTER TABLE 테이블명 ADD (컬럼명 VHARCHAR(20));
-------------------------------------------------
--RENAME - 컬럼명 변경
ALTER TABLE 테이블명 RENAME COLUMN 컬럼이전이름 TO 컬럼바꿀이름;
-------------------------------------------------
--MODIFY - (자료형)크기 변경
ALTER TABLE 테이블명 MODIFY (컬럼명 VHARCHAR(30);
-------------------------------------------------
--DROP - 컬럼 삭제
ALTER TABLE 테이블명 DROP COLUMN 컬럼명;
  • 제약조건
--제약조건 ALTER
--ADD - 제약 조건 추가
ALTER TABLE 테이블명 ADD [CONSTRAINTS 부여할 이름] PRIMARY KEY(PK이름);
-------------------------------------------------
--RENAME - 제약 조건명 변경
ALTER TABLE 테이블명 RENAME CONSTRAINTS 이전부여한이름 TO 부여할 이름;
-------------------------------------------------
--MODIFY - NOT NULL제외한 제약조건은 수정이 불가능
ALTER TABLE 테이블명 MODIFY 컬럼명 [CONSTRAINTS 부여한 이름] NOT NULL;
-------------------------------------------------
--DROP - 제약조건 삭제
ALTER TABLE 테이블명 DROP PRIMARY KEY;
ALTER TABLE 테이블명 DROP [CONSTRAINTS 부여한 이름];

ALTER TABLE ~ SET UNUSED

컬럼을 삭제하지 않지만 논리적으로 컬럼의 사용을 제한(비활성화)

ALTER TABLE 테이블명 SET UNUSED(컬럼명);

ALTER TABLE ~ RENAME TO

ALTER TABLE 테이블명 RENAME TO 새 테이블명;

3. TRUNCATE

사용하던 테이블의 모든 행 제거

TRUNCATE TABLE 테이블명;

4. DROP

테이블 삭제

  • 삭제후 되돌릴수 없다❗❗❗
DROP TABLE 테이블명;

🚨TRUNCATE vs DROP vs DELETE

DELETETRUNCATEDROP
데이터삭제 but 테이블 용량 줄어들지 x구조유지하고 데이터삭제존재자체 삭제
ROLLBACKOXX

0개의 댓글