2011-09-13 3 views
0

MySql은 구문의 CHECK을 무시합니다. 그래서 저는 생각하고있었습니다 - 왜 트리거를 사용하지 않습니까?MySql 테이블과 트리거

예를 들어 사람 표가 있고 한 필드는 전화 번호입니다. 전화 번호가 유효한지 (예 : 지역 번호) 유효하지 않은 전화 번호의 이벤트에 대해 적절한 오류 메시지로 삽입이 실패했는지 확인하기위한 트리거를 구성 할 수 있습니까?

답변

1

예, 삽입 된 값의 유효성을 검사하고 알 수없는 프로 시저를 호출하는 트리거를 만들 수 있습니다. 예 :

CREATE TABLE table1 
    id INT(11) NOT NULL, 
    phone VARCHAR(10) DEFAULT NULL, 
    PRIMARY KEY (id) 
); 

DELIMITER $$ 

CREATE trigger1 
BEFORE INSERT 
ON table1 
FOR EACH ROW 
BEGIN 
    IF NOT NEW.phone REGEXP '^[0-9]{3}-[0-9]{2}-[0-9]{2}$' THEN 
    CALL error; -- Call nonexistent procedure 
    END IF; 
END 
$$ 

DELIMITER ; 
1

예 가능한 해결책이며 자주 사용됩니다.

MySQL 5.5부터 SIGNAL을 사용하면 오류 메시지가 나타날 수 있습니다. 그 전에 다른 방법으로 오류를 호출해야합니다. 보통 UNIQUE 인덱스 테이블에 오류 메시지를 삽입하므로이 삽입이 실패하고 내 오류 메시지가 MySQL의 오류 메시지에 포함됩니다.