본문 바로가기

DB/PostgreSQL

[ PostgreSQL ] DELETE - 데이터 삭제하기

반응형

PostgreSQL에서 데이터를 삭제하는 방법은 DELETE 문을 사용합니다. 이 문을 통해 특정 조건에 맞는 데이터를 삭제하거나, 테이블의 모든 데이터를 삭제할 수 있습니다. DELETE 문은 주로 WHERE 절과 함께 사용하여 특정 조건을 만족하는 행만 삭제할 수 있도록 조정할 수 있습니다.

아래에서는 PostgreSQL에서 데이터를 삭제하는 다양한 방법을 예제와 함께 설명하겠습니다.


1. 기본 DELETE 문법

DELETE FROM 테이블이름 WHERE 조건;
  • 테이블이름: 데이터를 삭제할 테이블 이름입니다.
  • WHERE 조건: 특정 조건을 만족하는 행만 삭제할 때 사용됩니다. 만약 WHERE 절을 사용하지 않으면 모든 데이터가 삭제되므로 주의해야 합니다.

2. 데이터 삭제 예제

2.1 특정 조건에 맞는 데이터 삭제

특정 조건을 만족하는 데이터만 삭제하려면 WHERE 절을 사용합니다. 예를 들어, 다음과 같은 users 테이블이 있다고 가정합니다:

CREATE TABLE users (
    id SERIAL PRIMARY KEY,
    name VARCHAR(100),
    email VARCHAR(100),
    age INTEGER
);

INSERT INTO users (name, email, age) VALUES
('Alice Smith', 'alice@example.com', 25),
('Bob Brown', 'bob@example.com', 30),
('Charlie Johnson', 'charlie@example.com', 35),
('David Green', 'david@example.com', 40);

예시: 나이가 30인 사용자 삭제

users 테이블에서 나이가 30인 사용자를 삭제하려면:

DELETE FROM users
WHERE age = 30;

이 명령은 나이가 30인 사용자, 즉 Bob Brown을 삭제합니다.

예시: 특정 이메일을 가진 사용자 삭제

특정 이메일을 가진 사용자를 삭제하려면:

DELETE FROM users
WHERE email = 'charlie@example.com';

이 명령은 이메일이 'charlie@example.com'인 사용자를 삭제합니다.


2.2 모든 데이터 삭제 (DELETE vs TRUNCATE)

모든 데이터를 삭제하려면

DELETE 문에서 WHERE 절을 생략하면 테이블의 모든 데이터를 삭제할 수 있습니다.

DELETE FROM users;

이 명령은 users 테이블의 모든 데이터를 삭제합니다. 하지만 테이블의 구조는 그대로 남아 있습니다.

TRUNCATE를 사용하여 모든 데이터 삭제

TRUNCATE 문을 사용하면 테이블의 데이터를 더 빠르게 삭제할 수 있습니다. DELETE와 달리 TRUNCATE는 모든 데이터를 즉시 삭제하며, 일반적으로 더 효율적입니다.

TRUNCATE TABLE users;

TRUNCATEDELETE와 다르게 삭제된 데이터에 대한 트리거(trigger)가 실행되지 않고, 테이블 구조는 유지되지만 데이터를 빠르게 비웁니다.


3. 데이터 삭제 전후 확인 (RETURNING 절 사용)

PostgreSQL에서는 RETURNING 절을 사용하여 삭제된 데이터의 정보를 조회할 수 있습니다. 이를 통해 삭제된 행의 특정 열 값을 반환받을 수 있습니다.

예시: 삭제된 사용자의 이름과 이메일 반환

나이가 35인 사용자를 삭제하고, 삭제된 사용자의 이름과 이메일을 반환받으려면:

DELETE FROM users
WHERE age = 35
RETURNING name, email;

결과:

    name        |        email
----------------+---------------------
 Charlie Johnson| charlie@example.com

RETURNING 절은 삭제된 행의 정보를 확인하는 데 매우 유용합니다.


4. 트랜잭션과 함께 데이터 삭제 (BEGIN, COMMIT, ROLLBACK)

데이터 삭제는 영구적이기 때문에, 실수로 데이터를 삭제하지 않도록 트랜잭션을 사용할 수 있습니다. 트랜잭션을 사용하면 삭제 작업을 안전하게 수행하고, 문제가 있을 경우 ROLLBACK을 통해 취소할 수 있습니다.

예시: 트랜잭션을 사용한 데이터 삭제

  1. 먼저 트랜잭션을 시작합니다.
  2. BEGIN;
  3. 데이터를 삭제합니다.
  4. DELETE FROM users WHERE age < 30;
  5. 삭제한 데이터가 문제 없으면 COMMIT으로 변경 사항을 적용합니다.
  6. COMMIT;
  7. 만약 삭제 작업을 취소하려면 ROLLBACK으로 트랜잭션을 되돌릴 수 있습니다.
  8. ROLLBACK;

이 방법은 특히 중요한 데이터베이스 작업에서 실수를 방지하는 데 매우 유용합니다.


5. 데이터 삭제 요약

  1. 특정 조건에 맞는 데이터 삭제: DELETE FROM 테이블이름 WHERE 조건을 사용하여 특정 조건을 만족하는 데이터를 삭제할 수 있습니다.
  2. 모든 데이터 삭제: DELETE FROM 테이블이름 또는 TRUNCATE TABLE을 사용하여 모든 데이터를 삭제할 수 있습니다.
  3. 연관된 데이터 삭제: 외래 키 제약 조건에서 ON DELETE CASCADE 옵션을 사용하면, 연관된 테이블의 데이터도 함께 삭제할 수 있습니다.
  4. 삭제된 데이터 반환: RETURNING 절을 사용하여 삭제된 데이터의 정보를 확인할 수 있습니다.
  5. 트랜잭션 사용: 트랜잭션을 사용하여 삭제 작업을 안전하게 수행하고, 문제가 있으면 ROLLBACK으로 되돌릴 수 있습니다.

이러한 방법을 통해 PostgreSQL에서 데이터를 안전하고 효율적으로 삭제할 수 있습니다.

반응형