[SQL] 데이터 품질 높이기 - NOT NULL

·2025년 7월 16일

SQL

목록 보기
121/126

💡 not null 제약이란?

결측치(null) 데이터를 입력하지 못하게 막는 제약

📌 제약 생성 방법

🔸 1. 테이블 생성할 때

1.1 column level

create   table  emp_test2
( empno    number(10),
  ename    varchar2(20)  constraint  emp_test2_ename_nn  not  null,
  sal          number(10)  );


-- 에러발생: ename에 not null 제약 걸어뒀기 때문
insert into emp_test2(empno)
values(1234);

-- ORA-01400: NULL을 ("C##SCOTT"."EMP_TEST2"."ENAME") 안에 삽입할 수 없습니다

1.2 table level

--> not null 제약은 테이블 레벨 문법으로 제약을 생성 x

-- 에러발생: 부적합한 식별자

create table emp_test3
( empno    number(10),
  ename    varchar2(20),
  sal        number(10),
constraint emp_test3_ename_nn not null(ename) );

💡 not null 외에 다른 제약들은 전부 table level 로 제약 생성이 가능한데 not null 제약만 안됨

🔸 2. 만들어진 테이블에:

alter table 테이블명
modify 컬럼명 constraint 제약조건명 not null;

dept 테이블에 deptno에 not null을 걺

alter table dept
 modify deptno constraint dept_deptno_nn not null;

문제1. emp 테이블에 sal 에 not null 제약을 거시오

alter table emp
 modify sal constraint emp_sal_nn not null;

문제2. KING 의 월급을 null 로 변경하시오

-- 에러발생 
-- ORA-01407: NULL로 ("C##SCOTT"."EMP"."SAL")을 업데이트할 수 없습니다

update emp
 set sal = null
 where ename = 'KING';

문제3. 아래의 테이블을 생성하는데 empno 에 not null 제약을 걸어서 생성하시오

테이블명: emp500
컬럼명: empno, ename, sal, deptno

create table emp500
(empno  number(10) constraint emp500_empno_nn not null,
 ename  varchar2(20),
 sal   number(10),
 deptno  number(10) );

문제4. emp21 테이블에 통신사 컬럼에 not null 제약을 거시오

alter table emp21
 modify telecom constraint emp21_telecom_nn not null;

문제5. emp21 테이블에 걸려있는 제약들을 전부 삭제하시오

alter table emp21
 drop constraint emp21_telecom_nn;

📌 제약 삭제 방법

alter table 테이블명
drop constraint 제약조건명;

0개의 댓글