[sql] 중첩 쿼리를 사용하여 데이터베이스 테이블 데이터 변경 기록

일반적으로 데이터베이스 테이블의 변경 이력을 기록하기 위해 별도의 히스토리 테이블을 생성하여 변경 내용을 기록합니다. 중첩 쿼리를 사용하면 삽입, 업데이트, 삭제 등의 작업으로 인한 변경 이력을 효과적으로 기록할 수 있습니다.

아래는 중첩 쿼리를 사용하여 변경된 데이터의 이력을 기록하는 예제입니다.

-- 변경 이력을 기록할 히스토리 테이블 생성
CREATE TABLE 히스토리 (
    id INT AUTO_INCREMENT,
    table_name VARCHAR(255),
    operation VARCHAR(50),
    record_id INT,
    old_value VARCHAR(255),
    new_value VARCHAR(255),
    changed_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
    PRIMARY KEY (id)
);

-- 중첩 쿼리를 사용하여 데이터 변경 이력 기록
INSERT INTO 히스토리 (table_name, operation, record_id, old_value, new_value)
SELECT '테이블명', 
       CASE 
           WHEN old.column1 IS NULL THEN 'INSERT'
           WHEN new.column1 IS NULL THEN 'DELETE'
           ELSE 'UPDATE' 
       END AS operation,
       COALESCE(old.id, new.id),
       CASE 
           WHEN old.column1 IS NULL THEN NULL
           ELSE old.column1
       END AS old_column1,
       CASE 
           WHEN new.column1 IS NULL THEN NULL
           ELSE new.column1
       END AS new_column1
FROM 
    (SELECT * FROM 테이블명 WHERE id = 변경된레코드ID) AS new
LEFT JOIN 
    (SELECT * FROM 테이블명 WHERE id = 변경된레코드ID) AS old
ON new.id = old.id;

위 예제에서는 히스토리 테이블을 생성하고, INSERT INTO ... SELECT 문을 사용하여 변경된 데이터의 이력을 히스토리 테이블에 기록하는 방법을 보여줍니다.

이와 같이 중첩 쿼리를 사용하면 변경된 데이터의 이력을 효과적으로 기록할 수 있습니다.

관련 참고 자료: