Computer >> 컴퓨터 >  >> 프로그래밍 >> MySQL

MySQL에서 트리거를 활용해 필드에 0 값 입력을 차단하는 방법

MySQL에서 특정 필드에 0 값이 저장되는 것을 막고 싶다면, BEFORE INSERT 트리거를 사용하는 것이 가장 효과적인 방법입니다. 이 글에서는 실제 예제를 통해 0 값의 삽입을 자동으로 거부하는 트리거를 만드는 과정을 단계별로 살펴보겠습니다.

1. 테스트용 테이블 생성

먼저 실습에 사용할 간단한 테이블을 생성합니다.

mysql> create table DemoTable(Value int);
Query OK, 0 rows affected (0.85 sec)

2. 0 값 삽입을 차단하는 트리거 생성

다음으로, INSERT 작업이 실행되기 전에 새로 들어오는 값(new.Value)이 0인지 검사하고, 0이라면 에러를 발생시켜 삽입 자체를 중단시키는 트리거를 만듭니다.

mysql> DELIMITER //
mysql> create trigger preventing_to_insert_zero_value
    before insert on DemoTable
    for each row
    begin
       if(new.Value = 0) then SIGNAL SQLSTATE '45000' SET MESSAGE_TEXT = 'You can not provide 0 value';
    END if;
end
//
Query OK, 0 rows affected (0.34 sec)
mysql> DELIMITER ;

여기서 핵심은 SIGNAL SQLSTATE '45000' 구문입니다. SQLSTATE 코드 45000은 사용자가 직접 정의한 오류를 의미하며, MESSAGE_TEXT에 지정한 메시지가 클라이언트에게 그대로 전달됩니다.

3. 0 값 삽입 시도 — 차단되는지 확인

이제 실제로 0 값을 삽입해 보면, 트리거가 동작하여 입력이 거부됩니다.

mysql> insert into DemoTable values(0);
ERROR 1644 (45000): You cannot provide 0 value

위와 같이 에러 메시지와 함께 삽입이 실패하는 것을 확인할 수 있습니다. 즉, 트리거 덕분에 해당 테이블에는 더 이상 0 값이 저장되지 않습니다.

4. 다른 값은 정상적으로 삽입 가능

트리거는 오직 0 값만 차단하므로, 그 외의 값들은 아무 문제 없이 입력됩니다.

mysql> insert into DemoTable values(10);
Query OK, 1 row affected (0.14 sec)
mysql> insert into DemoTable values(-1000);
Query OK, 1 row affected (0.41 sec)

5. 결과 확인

SELECT 문으로 테이블의 전체 데이터를 조회해 보겠습니다.

mysql> select *from DemoTable;

실행 결과는 다음과 같습니다.

+-------+
| Value |
+-------+
| 10    |
| -1000 |
+-------+
2 rows in set (0.00 sec)

정리

BEFORE INSERT 트리거와 SIGNAL 구문을 조합하면 애플리케이션 코드 수정 없이도 데이터베이스 레벨에서 0 값의 입력을 확실하게 방지할 수 있습니다. 음수나 양수 등 다른 값은 정상적으로 저장되며, 데이터 무결성을 강화하는 데 매우 유용한 기법입니다.