PostgreSQL 기초강의, PostgreSQL 기초강좌
71강 SQL 초석 다지기 : PostgreSQL UNIQUE constraint
SQL 초석 다지기 71강 시작합니다.
이번 시간에는
▶ PostgreSQL UNIQUE constraint
에 대해서 알아보는 시간입니다.
요약: 이번 강의에서는 열 또는 열 그룹에 저장된 값이 테이블의 행에서 고유한지 확인하는 PostgreSQL UNIQUE 제약 조건에 대해 알아봅니다.
열 또는 열 그룹에 저장된 값이 전자 메일 주소 또는 사용자 이름과 같은 전체 테이블에서 고유한지 확인하려는 경우가 있습니다.
PostgreSQL은 데이터의 고유성을 올바르게 유지하는 고유 제약 조건을 제공합니다.
고유 제약 조건이 있으면 새 행을 삽입할 때마다 값이 테이블에 이미 있는지 확인합니다. 값이 이미 있으면 변경 내용을 거부하고 오류를 발생시킵니다. 기존 데이터 업데이트에 대해서도 동일한 프로세스가 수행됩니다.
고유 제약 조건을 열 또는 열 그룹에 추가하는 경우 PostgreSQL은 열 또는 열 그룹에 고유한 인덱스를 자동으로 생성합니다.
PostgreSQL UNIQUE constraint example
다음 문장은 전자 메일 열에 대한 고유한 제약 조건을 가진 person이라는 새 테이블을 만듭니다.
CREATE TABLE person (
id SERIAL PRIMARY KEY,
first_name VARCHAR (50),
last_name VARCHAR (50),
email VARCHAR (50) UNIQUE
);
위의 UNIQUE 제약 조건은 다음 쿼리와 같이 테이블 제약 조건으로 작성할 수도 있습니다:
CREATE TABLE person (
id SERIAL PRIMARY KEY,
first_name VARCHAR (50),
last_name VARCHAR (50),
email VARCHAR (50),
UNIQUE(email)
);
먼저 INSERT 문을 사용하여 person 테이블에 새 행을 삽입합니다:
INSERT INTO person(first_name,last_name,email)
VALUES('john','doe','j.doe@postgresqltutorial.com');
둘째, 중복된 전자 메일이 있는 다른 행을 삽입합니다.
INSERT INTO person(first_name,last_name,email)
VALUES('jack','doe','j.doe@postgresqltutorial.com');
PostgreSQL에서 오류 메시지가 발생했습니다.
Creating a UNIQUE constraint on multiple columns
PostgreSQL을 사용하면 다음 구문을 사용하여 열 그룹에 대한 고유 제약 조건을 만들 수 있습니다:
CREATE TABLE table (
c1 data_type,
c2 data_type,
c3 data_type,
UNIQUE (c2, c3)
);
c2 열과 c3 열의 값 조합은 전체 테이블에서 고유합니다. c2 또는 c3 열의 단일 값은 고유할 필요가 없습니다.
Adding unique constraint using a unique index
경우에 따라 기존 열 또는 열 그룹에 고유한 제약 조건을 추가할 수 있습니다. 다음 예를 살펴보겠습니다.
먼저 equipment 라는 이름의 테이블이 있다고 가정합니다:
CREATE TABLE equipment (
id SERIAL PRIMARY KEY,
name VARCHAR (50) NOT NULL,
equip_id VARCHAR (16) NOT NULL
);
둘째, equip_id 열을 기반으로 고유한 인덱스를 생성합니다.
CREATE UNIQUE INDEX CONCURRENTLY equipment_equip_id
ON equipment (equip_id);
셋째, equip_equip_id 인덱스를 사용하여 equipment 테이블에 고유 제약 조건을 추가합니다.
ALTER TABLE equipment
ADD CONSTRAINT unique_equip_id
UNIQUE USING INDEX equipment_equip_id;
ALTER TABLE 문은 테이블에 대한 exclusive lock을 획득합니다. 보류 중인 트랜잭션이 있는 경우 테이블을 변경하기 전에 모든 트랜잭션이 완료될 때까지 기다립니다. 따라서 다음 쿼리를 사용하여 진행 중인 현재 보류 중인 트랜잭션을 보려면 pg_stat_activity 테이블을 확인해야 합니다: |
SELECT
datid,
datname,
usename,
state
FROM
pg_stat_activity;
결과를 확인하여 트랜잭션에서 유휴 값이 있는 상태 열을 찾아야 합니다. 완료 대기 중인 트랜잭션입니다.
이번 강의에서는 고유 제약 조건과 이를 사용하여 동일한 테이블 내 여러 행에서 고유한 열 또는 열 그룹에 저장된 값을 적용하는 방법에 대해 배웠습니다.
다음 시간에 민니요.
본 강의는 PostgreSQL Tutorial을 참조합니다. https://www.postgresqltutorial.com/ |
Do it! SQL을 찾아 주셔서 감사합니다. 공감 ♥ , 댓글이 큰 힘이 됩니다. |
'IT > SQL 기초강좌 (PostgreSQL)' 카테고리의 다른 글
73강 SQL 초석 다지기 : PostgreSQL CASE expression (76) | 2023.01.16 |
---|---|
72강 SQL 초석 다지기 : PostgreSQL NOT NULL constraint (71) | 2023.01.15 |
70강 SQL 초석 다지기 : PostgreSQL CHECK constraint (126) | 2023.01.13 |
69강 SQL 초석 다지기 : PostgreSQL Foreign Key constraint (129) | 2023.01.12 |
68강 SQL 초석 다지기 : PostgreSQL Primary Key constraint (96) | 2023.01.11 |
댓글