본문 바로가기
IT/SQL 기초강좌 (PostgreSQL)

70강 SQL 초석 다지기 : PostgreSQL CHECK constraint

by DoitSQL 2023. 1. 13.
728x90

PostgreSQL 기초강의, PostgreSQL 기초강좌

70강 SQL 초석 다지기 : PostgreSQL CHECK constraint   

 

SQL 초석 다지기 70강 시작합니다.

 

이번 시간에는

 PostgreSQL CHECK constraint

에 대해서 알아보는 시간입니다.

 

요약: 이번 강의에서는 PostgreSQL CHECK 제약 조건과 이를 사용하여 부울식을 기반으로 표의 열에 있는 값을 제한하는 방법에 대해 알아봅니다.


 

CHECK 제약 조건은 열의 값이 특정 요구 사항을 충족해야 하는지 여부를 지정할 수 있는 제약 조건의 일종입니다.

CHECK 제약 조건은 값을 열에 삽입하거나 업데이트하기 전에 부울 식을 사용하여 값을 평가합니다.

값이 검사를 통과하면 PostgreSQL은 이러한 값을 열에 삽입하거나 업데이트합니다. 그렇지 않으면 PostgreSQL에서 변경 내용을 거부하고 제약 조건 위반 오류를 발생시킵니다.

 

Define PostgreSQL CHECK constraint for new tables   

일반적으로 CREATE TABLE 문을 사용하여 테이블을 작성할 때 CHECK 제약 조건을 사용합니다.

다음 문은 직원 테이블을 정의합니다.

DROP TABLE IF EXISTS employees;
CREATE TABLE employees (
     id SERIAL PRIMARY KEY,
     first_name VARCHAR (50),
     last_name VARCHAR (50),
     birth_date DATE CHECK (birth_date > '1900-01-01'),
     joined_date DATE CHECK (joined_date > birth_date),
     salary numeric CHECK(salary > 0)
); 

 

직원 테이블에는 세 가지 CHECK 제약 조건이 있습니다:

  • 먼저 직원의 생년월일(생년월일)이 1900년 01월 01일보다 커야 합니다. 1900년 01월 01일 이전에 생년월일을 삽입하려고 하면 오류 메시지가 나타납니다.
  • 둘째, 가입일(joined_date)은 생년월일(birth_date) 보다 커야 합니다. 이 조건은 유효하지 않은 날짜를 업데이트하는 것을 방지합니다.
  • 셋째, 급여가 0보다 커야 합니다.

 

직원 테이블에 새 행을 삽입해 보겠습니다:

INSERT INTO employees (first_name, last_name, birth_date, joined_date, salary)
VALUES ('John', 'Doe', '1972-01-01', '2015-07-01', - 100000); 

오류

급여에 마이너스 값을 삽입하려 했으나 오류가 납니다.

양의 값만 허용하는 급여 열의 CHECK 제약 조건 때문에 삽입에 실패했습니다.


기본적으로 PostgreSQL은 다음 패턴을 사용하여 CHECK 제약 조건에 이름을 부여합니다:

{table}_{column}_check 

 

예를 들어 급여 열의 제약 조건 이름은 다음과 같이 부여됩니다.

employees_salary_check 

 

만약, CHECK 제약 조건에 특정 이름을 할당하려는 경우 다음과 같이 CONSTRANT 표현식 뒤에 지정할 수 있습니다:

column_name data_type CONSTRAINT constraint_name CHECK(...) 

 

다음 예를 참조하십시오:

...
salary numeric CONSTRAINT positive_salary CHECK(salary > 0)
... 


Define PostgreSQL CHECK constraints for existing tables   

기존 테이블에 CHECK 제약 조건을 추가하려면 ALTER TABLE 문을 사용합니다. 데이터베이스에 price_list라는 이름의 기존 테이블이 있다고 가정합니다

CREATE TABLE prices_list (
     id serial PRIMARY KEY,
     product_id INT NOT NULL,
     price NUMERIC NOT NULL,
     discount NUMERIC NOT NULL,
     valid_from DATE NOT NULL,
     valid_to DATE NOT NULL
); 

 

이제 ALTER TABLE 문을 사용하여 check 제약 조건을 prices_list 테이블에 추가할 수 있습니다. 가격과 할인은 0보다 크고 할인은 가격보다 작아야 합니다. AND 연산자를 포함하는 부울식을 사용합니다.

ALTER TABLE prices_list 
ADD CONSTRAINT price_discount_check 
CHECK (
     price > 0
     AND discount >= 0
     AND price > discount
); 

 

유효한 날짜(valid_to)는 유효한 날짜(valid_from) 보다 크거나 같아야 합니다.

ALTER TABLE prices_list 
ADD CONSTRAINT valid_range_check 
CHECK (valid_to >= valid_from); 

 

CHECK 제약 조건은 열이 데이터베이스 계층에서 허용할 수 있는 값을 제한하는 추가 논리를 배치하는 데 매우 유용합니다. CHECK 제약 조건을 사용하여 데이터가 데이터베이스에 올바르게 업데이트되었는지 확인할 수 있습니다.


이번 강의에서 PostgreSQL CHECK 제약 조건을 사용하여 부울 식을 기반으로 열의 값을 확인하는 방법에 대해 배웠습니다.

 

수고하셨습니다.


본 강의는 PostgreSQL Tutorial을 참조합니다.  https://www.postgresqltutorial.com/
Do it! SQL을 찾아 주셔서 감사합니다. 공감 ♥ , 댓글이 큰 힘이 됩니다.

 

728x90

댓글