Building value

Oracle SQL 기본 문법[CONSTRAINT(1)] 본문

RDBMS/Oracle DB

Oracle SQL 기본 문법[CONSTRAINT(1)]

developer_Michael 2023. 3. 17. 18:17
반응형

CONSTRAINT는 데이터베이스에서 데이터의 무결성을 보장하기 위해 사용되는 제약조건입니다. 

 

데이터베이스의 제약조건은 데이터베이스에서 허용되는 데이터의 범위, 형식, 행동 등을 정의합니다. 

 

이러한 제약조건은 데이터베이스의 정확성과 안정성을 유지하기 위해 매우 중요합니다.

제약조건은 테이블 CREATE 시에 정의되거나 ALTER TABLE 문을 사용하여 테이블에 추가될 수 있습니다.

 

글 하나에 담기에는 다소 길어질 수 있어 2개에 나눠서 작성할 예정입니다.

 

 

1. PRIMARY KEY : 테이블에서 유일한 식별자로 사용되는 필드를 정의합니다.

 

Oracle SQL에서 PRIMARY KEY는 테이블의 각 레코드를 고유하게 식별할 수 있는 열(Column) 또는 열의 집합으로, 

 

중복된 값이 없어야 하고 테이블의 기본 키(primary key) 열은 유일해야 하며, NULL 값을 가질 수 없습니다. 

 

즉, PRIMARY KEY는 'NOT NULL' 이랑 'UNIQUE'가 고정으로 포함되어 있다고 할 수 있습니다.

 

PRIMARY KEY는 테이블의 데이터를 빠르게 검색하고 정렬하는 데 사용되며, 

 

다른 테이블과의 관계를 설정할 때도 사용됩니다.

 

PRIMARY KEY는 다음과 같이 CREATE TABLE 문을 작성할 때 2가지 방법으로 지정할 수 있습니다.

하나의 칼람이 아니더라도 2개의 칼람으로도 PRIMARY KEY를 묶어서 지정할 수도 있습니다.

CREATE TABLE 테이블명 (
    열1 데이터_타입 PRIMARY KEY,
    열2 데이터_타입,
    ...
);

CREATE TABLE 테이블명 (
    열1 데이터_타입,
    열2 데이터_타입,
    ...
    CONSTRAINT 제약조건_이름 PRIMARY KEY (열1, 열2, ...)
);

또는, 이미 생성된 테이블의 열에 대해 PRIMARY KEY 제약 조건을 추가하려면 

 

다음과 같이 ALTER TABLE 문을 사용합니다.

ALTER TABLE 테이블명
ADD CONSTRAINT 제약조건_이름 PRIMARY KEY (열1, 열2, ...);

PRIMARY KEY 제약 조건을 추가하려면, 해당 열(Column)에 NOT NULL 제약 조건이 지정되어 있어야 합니다. 

 

이는 PRIMARY KEY 열에 NULL 값을 입력할 수 없도록 합니다.

 

PRIMARY KEY를 지정하려는 칼람의 값 중에서 NULL값이 있다면 에러가 발생하면서 지정할 수 없게 됩니다.

 

 

2. FOREIGN KEY : 다른 테이블의 PRIMARY KEY를 참조하는 필드를 정의합니다.

 

Oracle SQL에서 FOREIGN KEY는 두 개의 테이블 간의 관계를 나타내는 제약 조건입니다. 

 

즉, 하나의 테이블의 열(Column)이 다른 테이블의 PRIMARY KEY 열을 참조하여 두 테이블을 연결하는 데 사용됩니다.

 

FOREIGN KEY를 사용하면 데이터의 일관성을 유지하고 무결성을 보호할 수 있습니다. 

 

예를 들어, EMP 테이블에서 DEPTNO 열을 참조하여 DEPT 테이블과 연결하는 경우, 

 

DEPTNO 값이 DEPT 테이블에 있는 값을 참조하도록 강제할 수 있습니다.

 

FOREIGN KEY를 지정하는 방법은 2가지가 있습니다.

 

1) 열(Column) 정의에서 FOREIGN KEY 지정

CREATE TABLE 테이블명1 (
    열1 데이터_타입 PRIMARY KEY,
    열2 데이터_타입,
    ...
);

CREATE TABLE 테이블명2 (
    열1 데이터_타입 PRIMARY KEY,
    열2 데이터_타입,
    ...
    FOREIGN KEY (열2) REFERENCES 테이블명1(열1)
);

2) ALTER TABLE 문에서 FOREIGN KEY 정의

ALTER TABLE 테이블명
ADD CONSTRAINT 제약조건_이름 FOREIGN KEY (열1, 열2, ...)
    REFERENCES 참조하는_테이블명(참조하는_열1, 참조하는_열2, ...);

 

제약조건의 이름을 지정하는 이유는 

 

데이터베이스에서 해당 제약조건이 어떤 것을 의미하는지 파악하기 쉽도록 하기 위함입니다. 

 

이름을 지정하지 않으면 제약조건이 자동으로 생성되며, 

 

생성된 제약조건의 이름은 데이터베이스 시스템에서 자동으로 생성됩니다.

하지만, 제약조건 이름을 직접 지정하면 해당 제약조건의 이름을 기억하기 쉽고, 

 

데이터베이스 관리 작업을 수행할 때 해당 제약조건을 식별하고 조작하기 쉬워집니다.

 

 

3. NOT NULL

 

NOT NULL은 특정 칼럼이 NULL 값을 허용하지 않도록 제약을 거는 것입니다. 

 

즉, 해당 컬럼에는 반드시 값을 입력해야 합니다.

 

예를 들어, 다음과 같은 EMP 테이블이 있다고 가정해 봅시다.

CREATE TABLE EMP(
  EMPNO NUMBER(4) CONSTRAINT EMP_EMPNO_PK PRIMARY KEY,
  ENAME VARCHAR2(10) CONSTRAINT EMP_ENAME_NN NOT NULL,
  JOB VARCHAR2(9),
  MGR NUMBER(4),
  HIREDATE DATE,
  SAL NUMBER(7,2),
  COMM NUMBER(7,2),
  DEPTNO NUMBER(2)
);

위의 쿼리에서 EMP 테이블의 ENAME 칼럼은 NOT NULL 제약 조건이 설정되어 있습니다. 

 

즉, 이 칼럼에는 NULL 값을 저장할 수 없습니다. 만약 아래와 같이 INSERT 문을 실행한다면 에러가 발생할 것입니다.

INSERT INTO EMP (EMPNO, ENAME, JOB, MGR, HIREDATE, SAL, COMM, DEPTNO)
VALUES (1001, NULL, 'MANAGER', 7839, TO_DATE('1981/04/01', 'YYYY/MM/DD'), 2450, NULL, 10);

위의 INSERT 문에서 ENAME 컬럼에 NULL 값을 저장하려고 하기 때문에 에러가 발생합니다.

 

NOT NULL을 사용하면 데이터 무결성을 보장하고 테이블의 데이터 품질을 유지할 수 있습니다.

반응형

'RDBMS > Oracle DB' 카테고리의 다른 글

Oracle SQL 기본 문법[CONSTRAINT(2)]  (0) 2023.03.17
Oracle SQL 기본 문법[TCL.트랜잭션]  (0) 2023.03.17
Oracle SQL 기본 문법[DELETE]  (0) 2023.03.17
Oracle SQL 기본 문법[UPDATE]  (0) 2023.03.16
Oracle SQL 기본 문법[INSERT]  (0) 2023.03.16