본문 바로가기
개발/database

mariadb 트리거 생성 예제 - 입력,수정,삭제

by 가시죠 2023. 8. 4.
반응형

mariadb 트리거 생성 예제 - 입력,수정,삭제

 

 

아래 예제는 MariaDB에서 특정 테이블에 새로운 레코드가 삽입, 수정 또는 삭제될 때 트리거를 이용하여 별도의 로그 테이블에 해당 이벤트를 기록하는 쿼리다.

 

예를 들어, employees 테이블에 새로운 레코드가 삽입, 기존 레코드가 수정, 레코드가 삭제되었을 때 이를 employees_log 테이블에 기록하는 트리거를 생성하는 쿼리.

 

employees_log 테이블은 event_type, event_time, id, name, position, salary 열을 가지고 있다.

 

-- 트리거 생성
CREATE TRIGGER employees_trigger
AFTER INSERT ON employees
FOR EACH ROW
BEGIN
    INSERT INTO employees_log (event_type, event_time, id, name, position, salary)
    VALUES ('INSERT', NOW(), NEW.id, NEW.name, NEW.position, NEW.salary);
END;


CREATE TRIGGER employees_trigger_update
AFTER UPDATE ON employees
FOR EACH ROW
BEGIN
    INSERT INTO employees_log (event_type, event_time, id, name, position, salary)
    VALUES ('UPDATE', NOW(), NEW.id, NEW.name, NEW.position, NEW.salary);
END;


CREATE TRIGGER employees_trigger_delete
AFTER DELETE ON employees
FOR EACH ROW
BEGIN
    INSERT INTO employees_log (event_type, event_time, id, name, position, salary)
    VALUES ('DELETE', NOW(), OLD.id, OLD.name, OLD.position, OLD.salary);
END;

위의 쿼리는 세 개의 트리거를 생성한다.
employees_trigger는 employees 테이블에 새로운 레코드가 삽입될 때, 
employees_trigger_update는 레코드가 수정될 때, 
employees_trigger_delete는 레코드가 삭제될 때 작동. 

각 트리거에서 INSERT INTO employees_log ... 구문을 사용하여 employees_log 테이블에 적절한 정보를 입력. 

NOW() 함수는 현재 시간을 가져오는 함수로, 이벤트가 발생한 시간을 event_time 열에 기록. 

NEW와 OLD는 트리거에서 참조하는 삽입/수정/삭제된 레코드를 나타냄

위의 예제에서 employees_log 테이블의 스키마는 다음과 같다.

CREATE TABLE employees_log (
    id INT AUTO_INCREMENT PRIMARY KEY,
    event_type VARCHAR(10),
    event_time DATETIME,
    name VARCHAR(100),
    position VARCHAR(100),
    salary DECIMAL(10,2)
);

event_type은 이벤트 종류(INSERT, UPDATE, DELETE)를 기록하는 열이고, 
event_time은 이벤트가 발생한 시간을 기록하는 열. 
employees_log 테이블은 이벤트가 발생할 때마다 해당 이벤트와 관련된 정보들을 로그로 기록하는 용도로 사용될 수 있다.

반응형

댓글