DB/SQL

[MySQL] BEFORE 트리거로 잘못된 값 입력 방지하기

bskyvision.com 2022. 10. 27. 19:58

BEFORE 트리거를 활용하면 테이블에 어떤 값이 입력되기 전에 검수하여 잘못된 값이 입력되는 것을 방지해줄 수 있습니다. 물론 응용 프로그램 차원에서 잘못된 값의 입력을 막을 수도 있습니다만, 만약 다양한 응용 프로그램에서 하나의 데이터베이스를 사용하는 상황이라면, 응용 프로그램마다 지켜야할 규칙이 많아지기 때문에 DB 차원에서 잘못된 값의 입력을 막는 것도 괜찮습니다.

 

우선 실습을 위해 다음과 같은 간단한 테이블을 만들었습니다. 이 테이블의 이름은 epl입니다. 

 

 

BEFORE 트리거 사용법

만약 이 테이블에 누군가 데이터를 삽입(insert)하려고 하는데 음수인 골 수를 넣으려고 한다던가 100 골이 넘는 말이 안되는 골 수를 넣으려고 할 때 그 값을 미리 검수하여 0으로 대체해준다면 데이터베이스를 관리하는 입장에서 편리할 것입니다. BEFORE 트리거를 활용하면 입력받은 값을 실제로 테이블에 입력하기 전에 그 값을 검수하는 과정이 가능해집니다. epl_BeforeInsertTrg라는 이름의 트리거를 생성하도록 하겠습니다. 

 

DELIMITER $$
CREATE TRIGGER epl_BeforeInsertTrg
    BEFORE INSERT
    ON epl
    FOR EACH ROW
BEGIN
    IF NEW.goal < 0 THEN
        SET NEW.goal = 0;
    ELSEIF NEW.goal > 100 THEN
        SET NEW.goal = 0;
    END IF;
END $$
DELIMITER ;

 

트리거를 생성했으니 한 번 비합리적인 데이터를 입력해보겠습니다. 먼저 음수인 골 수를 넣어보겠습니다. 그리고 105 골도 넣어보겠습니다. 

 

INSERT INTO epl VALUES ('요리스', -3);
INSERT INTO epl VALUES ('호나우두', 105);

 

이제 제대로 BEFORE 트리거가 작동했는지 확인해볼 차례입니다. 

 

SELECT * FROM epl;

 

비합리적인 입력 값들이 0으로 잘 대체된 것을 확인하실 수 있습니다. 

 

 

관련 글

- [MySQL] 트리거로 테이블에 입력/수정/삭제 발생할 때 로그 남기기