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

MySQL에서 데이터 자동 소문자 변환하기 – 트리거(Trigger)로 가능할까?

네, 트리거(TRIGGER)를 사용하면 충분히 가능합니다. 트리거를 만들어 두면 INSERT 시점에 값이 자동으로 소문자로 변환되어 저장됩니다. 아래에서 단계별로 살펴보겠습니다.

1. 테스트용 테이블 생성

먼저 예제에 사용할 테이블을 생성합니다.

mysql> create table DemoTable
    (
    StudentSubject text
    );
Query OK, 0 rows affected (0.61 sec)

2. 소문자 자동 변환 트리거 생성

다음으로, INSERT가 실행되기 전에 값을 소문자로 변환하는 BEFORE INSERT 트리거를 생성합니다.

mysql> CREATE TRIGGER lowerCaseOnInsertDemo BEFORE INSERT ON DemoTable FOR EACH ROW
    SET NEW.StudentSubject = LOWER(NEW.StudentSubject);
Query OK, 0 rows affected (0.21 sec)

트리거 내부의 LOWER() 함수가 새로 입력되는 값(NEW.StudentSubject)을 모두 소문자로 바꿔 저장합니다.

3. 데이터 삽입

이제 대소문자가 섞인 값을 넣어 보겠습니다.

mysql> insert into DemoTable values('MOngoDb');
Query OK, 1 row affected (0.18 sec)
mysql> insert into DemoTable values('JaVA');
Query OK, 1 row affected (0.12 sec)
mysql> insert into DemoTable values('MySqL');
Query OK, 1 row affected (0.15 sec)

4. 결과 확인

SELECT 문으로 저장된 데이터를 조회해 보면,

mysql> select *from DemoTable;

모든 값이 자동으로 소문자로 변환되어 저장된 것을 확인할 수 있습니다.

+----------------+
| StudentSubject |
+----------------+
| mongodb        |
| java           |
| mysql          |
+----------------+
3 rows in set (0.00 sec)

추가 팁: UPDATE 시에도 적용하려면?

INSERT뿐 아니라 기존 데이터를 수정할 때도 소문자 변환을 유지하고 싶다면, 같은 방식으로 BEFORE UPDATE 트리거를 추가로 생성하면 됩니다.

mysql> CREATE TRIGGER lowerCaseOnUpdateDemo BEFORE UPDATE ON DemoTable FOR EACH ROW
    SET NEW.StudentSubject = LOWER(NEW.StudentSubject);

이렇게 하면 데이터가 어떤 경로로 입력·수정되더라도 항상 일관된 소문자 형식으로 관리할 수 있어, 검색 조건 통일이나 중복 데이터 방지 등에도 유용합니다.