MySQL은 참조 무결성을 위해 외래 키를 지원하지만 CHECK 제약 조건은 지원하지 않는다는 것을 알고 있습니다. 그러나 트리거를 사용하여 에뮬레이션할 수 있습니다. 아래에 주어진 예의 도움으로 설명할 수 있습니다 -
예시
다음과 같이 2개의 문자, 대시, 3개의 숫자, 대시, 2개의 문자와 같은 수정 구문 등록 번호를 가질 수 있는 'car'라는 테이블이 있다고 가정합니다. -
mysql> Create table car (number char(9)); Query OK, 0 rows affected (0.32 sec)
값 업데이트를 위해 CHECK CONSTRAINT를 에뮬레이트하는 BEFORE UPDATE 트리거 생성 -
이제 잘못된 값으로 테이블을 업데이트하려고 하면 MySQL이 다음과 같이 업데이트를 중단하지 않을 것이라고 가정합니다. -
mysql> update car set number='AB-2X5-YZ'; Query OK, 1 row affected (0.04 sec) Rows matched: 1 Changed: 1 Warnings: 0
위 쿼리는 'car' 테이블의 잘못된 값을 업데이트했습니다. 다음 쿼리에서 우리는 테이블의 잘못된 데이터를 업데이트하는 것을 방지하는 BEFORE UPDATE 트리거를 생성할 것입니다 -
mysql> delimiter // mysql> create trigger car_update_value before update on car -> for each row -> begin -> if new.number not rlike '^[[:alpha:]]{2}-[[:digit:]]{3}-[[:alpha:]]{2}$' -> then -> signal sqlstate '45000' set message_text = 'Not a valid number'; -> end if; -> end // Query OK, 0 rows affected (0.11 sec) mysql> Delimiter ; mysql> update car set number='AB-2X5-YZ'; ERROR 1644 (45000): Not a valid number