| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 1 | 2 | 3 | 4 | 5 | 6 | |
| 7 | 8 | 9 | 10 | 11 | 12 | 13 |
| 14 | 15 | 16 | 17 | 18 | 19 | 20 |
| 21 | 22 | 23 | 24 | 25 | 26 | 27 |
| 28 | 29 | 30 |
Tags
- RNN
- python기초
- 객체지향
- 데이터엔지니어
- LangGraph
- SQL
- CLIP
- TTS
- 데이터 시각화
- 딥러닝
- dementional reduction
- Python
- 알고리즘
- 랭그래프
- 자연어처리
- ASR
- 에이전트
- 트랜스포머
- 캐글
- RDBMS
- 머신러닝
- 기초
- python 기초
- 정보처리기사
- 생성형 인공지능
- Transformer
- UMAP
- 힙정렬
- 소프트웨어 개발
- CNN
Archives
- Today
- Total
수달이네 기술 블로그
2. 제약조건(오라클) 본문
제약조건
테이블에 저장되는 값의 규칙을 정의하는 장치
잘못된 데이터 입력 차단
데이터의 무결성과 정확성 유지
제약 종류
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 |