MySql은 구문의 CHECK
을 무시합니다. 그래서 저는 생각하고있었습니다 - 왜 트리거를 사용하지 않습니까?MySql 테이블과 트리거
예를 들어 사람 표가 있고 한 필드는 전화 번호입니다. 전화 번호가 유효한지 (예 : 지역 번호) 유효하지 않은 전화 번호의 이벤트에 대해 적절한 오류 메시지로 삽입이 실패했는지 확인하기위한 트리거를 구성 할 수 있습니까?
MySql은 구문의 CHECK
을 무시합니다. 그래서 저는 생각하고있었습니다 - 왜 트리거를 사용하지 않습니까?MySql 테이블과 트리거
예를 들어 사람 표가 있고 한 필드는 전화 번호입니다. 전화 번호가 유효한지 (예 : 지역 번호) 유효하지 않은 전화 번호의 이벤트에 대해 적절한 오류 메시지로 삽입이 실패했는지 확인하기위한 트리거를 구성 할 수 있습니까?
예, 삽입 된 값의 유효성을 검사하고 알 수없는 프로 시저를 호출하는 트리거를 만들 수 있습니다. 예 :
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 ;
예 가능한 해결책이며 자주 사용됩니다.
MySQL 5.5부터 SIGNAL
을 사용하면 오류 메시지가 나타날 수 있습니다. 그 전에 다른 방법으로 오류를 호출해야합니다. 보통 UNIQUE
인덱스 테이블에 오류 메시지를 삽입하므로이 삽입이 실패하고 내 오류 메시지가 MySQL의 오류 메시지에 포함됩니다.