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

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


MySQL은 참조 무결성을 위해 외래 키를 지원하지만 CHECK 제약 조건은 지원하지 않는다는 것을 알고 있습니다. 그러나 트리거를 사용하여 에뮬레이션할 수 있습니다. 아래에 주어진 예의 도움으로 설명할 수 있습니다 -

예시

다음과 같이 두 글자, 대시, 세 자리, 대시, 두 글자와 같은 수정 구문 등록 번호를 가질 수 있는 'car'라는 테이블이 있다고 가정합니다. -

mysql> Create table car (number char(9));
Query OK, 0 rows affected (0.32 sec)

mysql> Insert into car values('AB-235-YZ');
Query OK, 1 row affected (0.10 sec)

위의 값은 유효한 값이지만 다음 쿼리에 삽입할 값은 어떻습니까?

mysql> insert into car values('AB-2X5-YZ');
Query OK, 1 row affected (0.04 sec)

위 값은 우리가 사용하는 고정 구문에 위배되는 숫자 사이에 문자가 포함되어 있기 때문에 유효한 값이 아닙니다.

값 삽입을 위해 CHECK CONSTRAINT를 에뮬레이트하는 BEFORE INSERT 트리거 생성 -

이제 이러한 종류의 삽입을 방지하기 위해 다음과 같이 트리거를 만들 수 있습니다. -

mysql> delimiter //
mysql> create trigger car_insert_value before insert 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.15 sec)
mysql> Delimiter ;

mysql> Delete from car;
Query OK, 2 rows affected (0.06 sec)

이제 잘못된 번호를 삽입하려고 하면 위에서 만든 트리거가 삽입을 중지하고 다음과 같은 오류를 발생시킵니다. −

mysql> insert into car values('AB-2X5-YZ');
ERROR 1644 (45000): Not a Valid Number

그러나 다음과 같이 유효한 값을 삽입할 수 있습니다. -

mysql> insert into car values('AB-235-YZ');
Query OK, 1 row affected (0.04 sec)