[DDL] 제약조건
제약조건
테이블에 제약사항을 걸어 부적절한 데이터가 입력되는 것을 막는 목적으로 사용
데이터 무결성 유지!!
📌제약조건 확인
-- 유저가 소유한 모든 제약조건 조회 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
DELETE | TRUNCATE | DROP | |
---|---|---|---|
데이터삭제 but 테이블 용량 줄어들지 x | 구조유지하고 데이터삭제 | 존재자체 삭제 | |
ROLLBACK | O | X | X |
Author And Source
이 문제에 관하여([DDL] 제약조건), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@kyy806/sql-제약조건저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)