수달이네 기술 블로그

2. 제약조건(오라클) 본문

RDBMS

2. 제약조건(오라클)

슬픈 수달이 2025. 10. 25. 04:41

제약조건

테이블에 저장되는 값의 규칙을 정의하는 장치

잘못된 데이터 입력 차단

데이터의 무결성과 정확성 유지

제약 종류

Primary key(PK)(기본키)

  • 테이블의 기본키(고유 식별자)
  • 중복 불가, NULL 불가
  • 하나의 테이블에 하나만 존재
CREATE TABLE TBL_STUDENT(
	student_id NUMBER PRIMARY KEY,
	student_name varchar2(20)
);

INSERT INTO TBL_STUDENT values(1, '짱구');
INSERT INTO TBL_STUDENT values(NULL, '철수');
--SQL Error [1400] [23000]: ORA-01400: cannot insert NULL into ("WEB2"."TBL_STUDENT"."STUDENT_ID")
INSERT INTO TBL_STUDENT values(1, '훈이');
--SQL Error [1] [23000]: ORA-00001: unique constraint (WEB2.SYS_C006999) violated
  • 위처럼 NULL 값을 넣거나, 중복 값을 넣을 때 오류가 생긴다.
CREATE TABLE TBL_STUDENT(
	student_id NUMBER CONSTRAINT pk_student PRIMARY KEY,
	student_name varchar2(20)
);

  • 위와 같이 제약조건의 이름을 설정해 줄 수도 있다.(제약조건 삭제시 편리하게 사용)
--SQL Error [1] [23000]: ORA-00001: unique constraint (WEB2.PK_STUDENT) violated
  • 위 오류에서 중복 오류의 메세지 또한 변한다

NOT NULL0

  • NULL 불가한 값
CREATE TABLE tbl_member(
	member_id NUMBER CONSTRAINT pk_member PRIMARY KEY,
	member_name varchar2(10) NOT NULL 
);

INSERT INTO TBL_MEMBER values(1, '짱구');
INSERT INTO TBL_MEMBER values(2, NULL);
--SQL Error [1400] [23000]: ORA-01400: cannot insert NULL into ("WEB2"."TBL_MEMBER"."MEMBER_NAME")

  • 위와 같이 표기되며, NULL을 입력할시 오류가 생성된다.

DEFAULT

  • 값이 없을 때 자동 입력 값
CREATE TABLE tbl_product(
	product_id NUMBER CONSTRAINT pk_product PRIMARY KEY,
	product_name varchar2(60) NOT NULL,
	reg_date DATE DEFAULT SYSDATE
);
INSERT INTO tbl_product
values(1, '컴퓨터', to_date('2025-10-20', 'YYYY-MM-DD'));

INSERT INTO tbl_product (PRODUCT_ID, PRODUCT_NAME)
VALUES(2, '노트북');

  • 만약 위와같이 입력되지 않았을 경우 자동으로 DEFAULT로 설정해준 값이 나온다.

CHECK(CHK)

  • 값의 조건을 제한
CREATE TABLE tbl_product1(
	product1_id NUMBER CONSTRAINT pk_product1 PRIMARY KEY,
	product1_name varchar2(50) CONSTRAINT NN_product1 NOT NULL,
	product1_price NUMBER CONSTRAINT CHK_PRODUCT1_PRICE CHECK(PRODUCT1_PRICE >= 0)
);

  • 위와 같이 CHECK(연산자)를 이용하여 값을 제한 가능하다.
INSERT INTO TBL_PRODUCT1 VALUES (2, '키보드', -100);
--SQL Error [2290] [23000]: ORA-02290: check constraint (WEB2.CHK_PRODUCT1_PRICE) violated
  • 위와 같이 조건에 맞지 않을 경우 오류가 발생한다.
  • CHECK(변수 IN(’M’,’W’)); :해당 변수는 M 혹은 W여야한다.

FOREIGN KEY(FK)

  • 다른테이블의 기본키나 UNIQUE KEY를 참조한다
  • 부모테이블에 있는 값만 입력가능→참조 무결성 유지
    • 참조 무결성: 외래키(FK, FOREIGN KEY) 제약조건을 통해 유지되는 무결성 규칙
    • 자식 테이블(FK보유)이 부모 테이블(PK/UK 보유)의 값만 참조하도록 강제
    • 잘못된 참조를 차단하여 데이터의 일관성 보장
CREATE TABLE tbl_orders(
	ORDERS_ID NUMBER PRIMARY KEY,
	PRODUCT1_ID NUMBER,
	CONSTRAINT FK_PRODUCT FOREIGN KEY(PRODUCT1_ID) REFERENCES TBL_PRODUCT1(PRODUCT1_ID)
);

  • 위와 같이 표시되며,위처럼 다이어그램에 연관되어 뜨게 된다.
INSERT INTO TBL_ORDERS 
VALUES(1,1);
--SQL Error [2291] [23000]: ORA-02291: integrity constraint (WEB2.FK_PRODUCT) violated - parent key not found
  • 위처럼 부모테이블에 없는 값을 넣어줄 경우 오류가 발생하는 것을 볼 수 있다.
INSERT INTO TBL_PRODUCT1
VALUES (1, '컴퓨터', 10000);
INSERT INTO TBL_ORDERS 
VALUES(1,1);
  • 값이 있다면 적용 가능

UNIQUE KEY(UK)

  • 중복 불가(고유값만 가능)
  • NULL값 가능
CREATE TABLE tbl_user_account(
	user_id NUMBER CONSTRAINT pk_user_account PRIMARY KEY,
	user_email varchar2(100) UNIQUE 
);

  • 위와 같이 설정 하면 제약조건에 위처럼 적용된다.
INSERT INTO TBL_USER_ACCOUNT
values(1, 'kim@gmail.com');
INSERT INTO tbl_user_account
values(2, NULL);
INSERT INTO TBL_USER_ACCOUNT 
values(3, 'kim@gmail.com');
--SQL Error [1] [23000]: ORA-00001: unique constraint (WEB2.SYS_C007011) violated
  • 위를 보면 NULL값은 적용 가능하지만 중복값은 오류가 발생하는 것을 볼 수 있다.

제약조건 작성법

컬럼레벨

  • 컬럼에 직접 제약조건 설정
CREATE TABLE 테이블명(
	컬럼명 자료형 PRIMARY KEY,
	컬럼명 자료형 NOT NULL...
);

테이블 레벨 제약조건

  • 테이블 안에서 제약조건 설정
CREATE TABLE 테이블명(
	컬럼명 자료형,
	컬럼명 자료형,
	CONSTRATINT 제약조건이름 제약조건(지정할 컬럼명)
);

 

'RDBMS' 카테고리의 다른 글

MySQL 설치 및 기본 문법 등  (1) 2025.11.07
4. JDBC기능 구현 + SEQUENCE문  (0) 2025.10.30
3. DDL, DML, DCL, TCL  (0) 2025.10.28
1. SQL 문 (오라클)  (0) 2025.10.23
0. RDBMS 배우기  (0) 2025.10.22