Computer >> 컴퓨터 >  >> 프로그램 작성 >> MySQL

BEFORE UPDATE 트리거를 사용하여 테이블의 값을 업데이트하기 위해 CHECK CONSTRAINT를 에뮬레이트하는 방법은 무엇입니까?


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