2012-09-15 2 views
1

체크 제약 조건을 이미 추가 한 후 테이블을 추가하고 싶습니다. 인터넷 검색을하고 답변을 찾았지만 작동하지 않는 것 같습니다. 여기에 내가 시도 것입니다 그러나데이터가 가득차면 테이블에 체크 제약 조건 추가하기

ALTER TABLE noise_table 
    ADD CONSTRAINT chk_level CHECK (noise_level >= 0 and noise_level <= 0.1); 

, 그것은 전혀 작동하지 않는 것으로 있도록이 문을 실행 한 후, 난 아직도, 업데이트하고 검사 간격의 외부를 삽입 할 수 있습니다. 내가 여기서 무엇을 놓치고 있니?

+1

MySQL은 검사 제약 조건을 지원하지 않습니다. –

답변

3

ALTER TABLE Syntax 아래 설명과 같이

CHECK 절을 해석하지만, 모든 스토리지 엔진에 의해 무시됩니다.

대신 정의 할 수 있습니다 BEFORE INSERTBEFORE UPDATE 조건이 충족되지하는 경우에 오류가 인상 triggers :

DELIMITER ;; 

CREATE TRIGGER chk_insert_level BEFORE INSERT ON noise_table FOR EACH ROW 
IF NOT (NEW.noise_level >= 0 AND NEW.noise_level <= 0.1) THEN 
    CALL invalid_noise_level; -- non-existent procedure, raises an error 
END IF;; 

CREATE TRIGGER chk_update_level BEFORE UPDATE ON noise_table FOR EACH ROW 
IF NOT (NEW.noise_level >= 0 AND NEW.noise_level <= 0.1) THEN 
    CALL invalid_noise_level; -- non-existent procedure, raises an error 
END IF;; 

DELIMITER ; 
+0

MySQL은 실제 예외 발생을 지원하지 않습니까? –

+0

@a_horse_with_no_name : 당신이 맞습니다. 5.5에서 ['SIGNAL'] (http://dev.mysql.com/doc/en/signal.html)을 사용합니다. 나는 아직도 5.1 세계에 머물러있다. : – eggyal

0

MySQL이 점검 제한 조건을 지원하지 않습니다.

대신 MySQL은 검사 제약 조건을 "자동으로 무시"하므로 오류를 표시하지 않습니다.

+0

흥미로운 ... 그렇다면 "열 x는 값 x와 y 사이에있을 수 있습니다"와 같은 제약 조건을 어떻게 적용합니까? 물론 여러 데이터베이스가 이러한 제약 조건을 적용합니다 ... – zebra

+0

@Zebra : 이것은 MySQL의 트리거를 통해서만 수행 할 수 있습니다 . –