ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • SQL DELETE: 데이터 삭제의 정석
    🐬 MySQL/MySQL 키워드 2024. 11. 27. 12:02
    728x90

    SQL DELETE: 데이터 삭제의 정석

    안녕하세요.  오늘은 데이터베이스 관리에서 중요한 역할을 하는 DELETE 명령어에 대해 자세히 알아보겠습니다. DELETE는 데이터베이스에서 불필요한 데이터를 제거하는 데 사용되는 강력한 도구입니다.

    하지만 강력한 만큼 주의해서 사용해야 합니다.

    DELETE의 기본 구문

    DELETE의 기본 구문은 다음과 같습니다

    이 구문을 통해 특정 조건에 맞는 행을 테이블에서 삭제할 수 있습니다.

    DELETE FROM table_name
    WHERE condition;

     

    DELETE 사용 예시

     

    • 단일 행 삭제
    DELETE FROM customer
    WHERE id=2

     

     

    • 여러 행 삭제
    DELETE FROM products
    WHERE category = 'Discontinued';
    
    
    products 테이블에서 'Discontinued' 카테고리에 속한 모든 제품을 삭제하는 DELETE 문입니다. 
    
    DELETE FROM: products 테이블에서 데이터를 삭제합니다.
    
    WHERE 절: category = 'Discontinued' 조건을 사용하여 삭제할 행을 지정합니다.
    
    이 쿼리는 'Discontinued' 카테고리에 해당하는 모든 제품을 한 번에 삭제합니다.
    문제) customer 테이블에서 나이가 32살 35살 40살인 데이터를 삭제하시오
    
    
    -정석적인 방법
    DELETE FROM customer
    WHERE age=35
    	OR age=35 
    	OR age=40;
    
    -편의성을 위해 개선한 방법
    DELETE FROM customer
    WHERE age IN (32,35,40);

     

    • 서브쿼리를 이용한 삭제
    DELETE FROM orders
    WHERE customer_id IN (SELECT id FROM customers WHERE inactive = TRUE);
    
    
    DELETE FROM: orders 테이블에서 데이터를 삭제합니다.
    WHERE 절: customer_id가 특정 조건을 만족하는 주문만 삭제합니다.
    서브쿼리 사용: IN 연산자와 함께 서브쿼리를 사용하여 비활성 고객의 ID를 선택합니다.
    서브쿼리 내용: customers 테이블에서 inactive = TRUE인 고객의 id를 선택합니다

     

     

    DELETE 사용 시 주의사항

    1. WHERE 절의 중요성
      WHERE 절을 생략하면 테이블의 모든 데이터가 삭제됩니다. 항상 의도한 대로 삭제되는지 확인하세요.
    2. 백업의 중요성
      중요한 데이터를 삭제하기 전에는 반드시 백업을 해두세요.
    3. 더보기

      트랜잭션(Transaction)은 컴퓨터나 데이터베이스에서 하나의 작업 단위를 이루는 동작 묶음

       

      예)

      1. 은행 이체
        • A 계좌에서 10만 원 출금 → B 계좌로 10만 원 입금
        • 중간에 시스템이 꺼지거나 오류가 나도 '둘 다 완료'되거나, 아니면 '아무 작업도 되지 않음'
      2. 온라인 쇼핑 결제
        • 재고 확인 → 결제 처리 → 주문 기록 생성
        • 이 과정 중 하나라도 실패하면 모든 작업이 취소

      트랜잭션의 핵심은 이 작업들이 완벽히 처리되거나(성공), 아예 아무 일도 없었던 것처럼(실패) 처리

      이처럼 트랜잭션은 데이터가 항상 신뢰할 수 있는 상태로 유지되도록 보장해 주는 개념

       

      트랜잭션의 특징 (ACID)

      1. 원자성(Atomicity): 트랜잭션의 모든 작업이 성공하거나, 하나라도 실패하면 전부 취소. (예: 돈이 송금되지 않았다면 출금도 취소)
      2. 일관성(Consistency): 트랜잭션이 끝난 뒤에도 데이터가 유효한 상태로 유지. (예: 계좌 잔액 합계는 변하지 않아야 함)
      3. 격리성(Isolation): 동시에 여러 트랜잭션이 실행될 때 서로 간섭하지 않음. (예: 다른 사람의 송금 작업이 내 작업에 영향 주지 않음)
      4. 지속성(Durability): 트랜잭션이 성공적으로 끝나면 결과가 영구적으로 저장. (예: 송금 기록이 저장)

      현실적인 예시

      1. 은행 이체
        • A 계좌에서 10만 원 출금 → B 계좌로 10만 원 입금
        • 중간에 시스템이 꺼지거나 오류가 나도 둘 다 완료되거나, 아니면 아무 작업도 되지 않음.
      2. 온라인 쇼핑 결제
        • 재고 확인 → 결제 처리 → 주문 기록 생성
        • 이 과정 중 하나라도 실패하면 모든 작업이 취소.트랜잭션 사용
          여러 삭제 작업을 하나의 논리적 단위로 처리하려면 트랜잭션(*더보기 설명 참조*)을 사용하세요.

    안전한 DELETE 사용법

    SELECT로 먼저 확인

      실제 DELETE 전에 영향받을 행을 먼저 확인하세요.

    SELECT * 
    FROM table_name 
    WHERE condition;

     

    LIMIT 사용 (MySQL)

      한 번에 삭제할 행 수를 제한하여 실수를 방지할 수 있습니다.

    DELETE 
    FROM table_name 
    WHERE condition 
    LIMIT 1000;

     

    테스트 환경에서 먼저 실행
      실제 데이터베이스에서 실행하기 전에 테스트 환경에서 먼저 실행

     

    오류 예제

     SQL 

    WHERE 조건이다 
    그렇기에 콤마가 아닌 OR 이 들어가야 한다.
    OR을 사용한 후 
    age 라는 컬럼을 다시한번 선택 해줘야 한다
    컴퓨터는 첫 age=35 인식 후 OR 을 사용하면 뒷내용 =35는 인식을 못한다.

    사람말로 풀이하는 경우 

    DELETE FROM customer ( customer 테이블 데이터를 삭제해라)
    WHERE age=35 (조건은 나이컬럼에 35 데이터)
    OR=35 (또 35)
    OR=35(또 35) 

    컴퓨터는 화낸다 또 35는 뭔말이니~? 어디 있는 데이터니~? 

     

    728x90
Designed by Tistory.