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 테이블은 이벤트가 발생할 때마다 해당 이벤트와 관련된 정보들을 로그로 기록하는 용도로 사용될 수 있다.
'개발 > database' 카테고리의 다른 글
mariadb 이메일 유효성 체크 함수 (0) | 2023.08.28 |
---|---|
mariadb group by 중 특정 컬럼 값이 다를 경우 count 다르게 조회 (0) | 2023.08.09 |
WITH 절 사용법 (0) | 2023.03.28 |
MySQL/MariaDB 프로파일링 (0) | 2022.09.18 |
MySQL/MariaDB 실행계획 수행 (0) | 2022.09.18 |
댓글