카테고리 없음

sql UK, NOT NULL, CHECK, 제약조건 추가,삭제,활성화,비활성화

boangod 2025. 9. 24. 21:56

 

row_id 행이 저장되어 있는 물리적인 위치

row_num 내가 읽어드리는 행의 개수(풀 테이블스캔할 때 주로 사용한다.)

 

행을 읽는 방법은 2가지 밖에 없다.

full table scan → 테이블의 행을 처음부터 끝까지 읽는 것.(행을 전부 읽는 것(block단위로 읽는다.))

index scan → pk를 복사해서 정렬을 해둔다. index scan이 더 빠르다.

 

 

 

제약조건 2

 

UK, NOT NULL, CHECK

 

UK(Unique Key),            NOT NULL 설정

ㄴ 중복 안되게 해 주는 거.     ㄴ 돈과 관련된 컬럼들

CREATE TABLE 테이블 (

.....

CONSTRAINT 제약_조건 UNIQUE (컬럼));

 

CREATE TABLE 테이블 (

컬럼 데이터_타입 CONSTRAINT 제약_조건 NOT NULL,

......;

 

CREATE TABLE 테이블(

컬럼데이터_타입 CONSTRAINT 제약_조건 UNIQUE,

.....;

 

‐ UK는 고유인덱스가 만들어진다.

‐ NOT NOLL 컬럼레벨에서 만정의 할 수 있다.

 

 

 

CHECK 설정

 

CREATE TABLE 테이블 (

.....

CONSTRAINT 제약_조건 CHECK (조건));

 

또는

 

CREATE TABLE 테이블(

컬럼데이터_타입 CONSTRAINT 제약_조건 CHECK(조건),

...;

 

‐ 행에 입력될 데이터의 조건을 정의한다.

조건은 WHERE절에 기술하는 조건형식과 동 일하다.

‐ NOT NULL은 CHECK 제약 조건으로 간주된다.

      . CHECK (컬럼 ISNOTNULL)

 

 

• CHECK와 NOT NULL 제약 조건내용검색

SELECT constraint_name, search_condition FROM user_constraints

WHERE table_name = '테이블';

 

 

제약조건추가삭제

 

emp, dept 테이블 간의 관계가 있는데 제약조건이 맞지 않는 걸 어떻게 찾지?

 

SELECT DISTINCT dno FROM emp

MINUS

SELECT dno FROM dept;

===================================

 

ALTER TABLE 테이블

ADD CONSTRAINT 제약_조건 제약_조건_타입;

 

ALTER TABLE 테이블

MODIFY 컬럼 CONSTRAINT 제약_조건 NOT NULL; → not null은 그냥 모디파이해야 한다.

 

ALTER TABLE 테이블 DROP PRIMARY KEY | UNIQUE(컬럼) | CONSTRAINT 제약_조건 [CASCADE];

                                                                                                  포랜키, 프라이머리키도 지워버린다. ┘

 

NOT NULL을제외하고모두 ADD 명령으로 제약조건을 추가한다.

NOT NULL은 MODIFY 명령으로 추가한다.

PK나 UK는 삭제 시에 참조 중인 FK를 먼저 삭제해야 한다.

      . CASCADE를 이용할 수 있다.

‐ 제약조건은'CREATE TABLE '명령이 아니라'ALTERTABLE ~' 통해서 설정하는 것이 작업에 유리하다.

 

 

 

 

제약조건활성화비활성화

 

ALTER TABLE 테이블

ENABLE CONSTRAINT 제약_조건;

 

ALTER TABLE 테이블

DISABLE CONSTRAINT 제약_조건 [CASCADE]

                                                              ㄴ 참조하는 포랜키도 비활성화해준다.

 

‐ PK와 UK가 ENABLE/DISABLE 될 때 인덱스도 생성/삭제된다.

‐ PK와 UK가 DISABLE 되려면 참조하는 FK가지워지거나비활성화되어야 한다.

       . CASCADE 옵션을 이용할 수 있다.

 

 

제약조건삭제

 

• class와 st에 추가된 제약조건을 모두 삭제한다.

 

SQL> ALTER TABLE st

2 DROP PRIMARY KEY;

 

SQL> ALTER TABLE st

2 DROP CONSTRAINT st_cno_fk;

 

SQL> ALTER TABLE class

2 DROP PRIMARY KEY;

 

SQL> ALTER TABLE class

2 DROP CONSTRAINT class_cname_uk;

ㄴ 이름으로 삭제

 

SQL> ALTER TABLE class

2 DROP CONSTRAINT class_cname_nu;

 

‐ 삭제순서에 주의한다.

 

 

제약조건비활성화

• 제약조건의 상태를 확인하고 비활성화/활성화한다.

 

SQL> SELECT table_name, constraint_name, status
 2   FROM user_constraints
 3   WHERE table_name IN ('CLASS', 'ST');


 SQL> ALTER TABLE st
 2  DISABLE CONSTRAINT st_sno_pk;


 SQL> INSERT INTO st (sno, sname) values ('10', '조조');
 SQL> INSERT INTO st (sno, sname) values ('10', '유비');


 SQL> SELECT * FROM st;

 

 

삭제는 자식부터

만들 때는 부모부터