2012-12-29 2 views

답변

2

권장 솔루션은 여기가 그 상태 중 하나 cancelled 또는 claimed입니다 하나 열이 따라서 만이 가능한 상태를 가진 NULL이 아닌 부울 열입니다 경우 을 갖도록 스키마를 변경하는 것입니다.

BEFORE UPDATE 트리거를 사용하면 원하는대로 할 수 있지만 이미 지나치게 복잡한 스키마에 비해 복잡성이 늘어나는 것처럼 보입니다. 내가 UPDATE하지 않는 구문이 아마 작업을 필요로하지만 다음과 같은

뭔가 종종 트리거 : 아직도 값이 다른`NULL` 하나 열이있을 수

CREATE TRIGGER `trg_status` BEFORE UPDATE ON your_table 
FOR EACH ROW 
BEGIN 
    /* If the claimed was set to 1, set cancelled to 0 */ 
    IF OLD.cancelled = 1 AND NEW.claimed = 1 THEN 
    SET NEW.cancelled = 0; 
    /* Or the opposite.... */ 
    ELSEIF OLD.claimed = 1 AND NEW.cancelled = 1 THEN 
    SET NEW.claimed = 0; 
    END IF 
END 
+0

@pst. – user113215

+0

@pst 문제가 보이지 않습니다. 단일 열'상태 ENUM ('취소됨', '청구 됨', '보류 중', ...)'을 상상해보십시오. 필요한만큼의 값을 추가 할 수 있고 비즈니스 규칙에 따라이 열에 'NULL'을 허용할지 여부를 지정할 수 있습니다. – user113215

+0

@pst 약간의 설명과 기본 트리거도 추가했습니다. –

관련 문제