2016-08-20 2 views
2

여기에 레코드를 데이터베이스에 삽입하기 전에 CHECK 제약 조건을 2 개 생성하고 싶습니다.MySql 워크 벤치 CHECK 제약

ALTER TABLE SubjectEnrollment 
ADD CONSTRAINT register CHECK (register <= classSize AND register >=0), 
ADD CONSTRAINT available CHECK (available <= classSize AND available >= 0); 
  1. 레지스터 특성 classSize 특성과보다 더 작아야 0보다
  2. 가능한 속성해야 classSize의 attribte 미만 0

I이 구문 입력 이하 MyWindows Workbench에서 "구문 오류 : 예기치 않은 'CHECK'(확인) '메시지가 표시됩니다. 어떻게 트리거를 사용하여 추가해야합니까?

감사합니다.

+2

왜 귀찮은가요? MySQL은 체크 제약을 강제하지 않는다. –

+0

수표가 필요하면 MySQL의 트리거를 사용하십시오. –

+0

업데이트가 테이블을 만들기 전에, 학생이 수강 신청을하기 전에 사용 가능한 클래스 크기를 확인해야합니다. 40 명의 학생들 만 수업을들을 수 있다면 41 번째 학생은 더 이상 테이블에 입장 할 수 없습니다. – helloworld1234

답변

2

MySQL은 check을 지원하지 않으므로 트리거가 필요합니다. 이 같은 CREATE 트리거 :

delimiter $$ 
CREATE TRIGGER some_trigger_name 
BEFORE INSERT ON SubjectEnrollment 
FOR EACH ROW 
BEGIN  
    IF (NEW.register > NEW.classSize OR NEW.register < 0)   
     SIGNAL SQLSTATE '45000' SET MESSAGE_TEXT = 'invalid data'; 
    END IF; 
END 
$$ 

UPDATE에 대해 동일한 트리거를 정의해야합니다.

+0

감사합니다. 'NEW'라는 단어에 테이블 이름을 물어봐도 될까요? – helloworld1234

+0

'NEW'는 테이블에 삽입 될 레코드를 참조합니다. 'NEW.register'는 삽입하고자하는'register'의 값입니다. BTW에서 UPDATE 트리거를 정의한 다음 업데이트하려는 레코드를 참조하는 데 'NEW'라는 단어를 사용하십시오. –

+0

감사합니다. – helloworld1234

0

댓글이 약간 깁니다.

MySQL은 check의 구문을 지원하지만 create table의 :

create table (
    . . . 
    CHECK (register <= classSize AND register >= 0) 
); 

Check이 실제로 엔진에서 구현되지 않은, 그래서 이것은 아무것도하지 않습니다. 아마도 이러한 이유 때문에 constraint 구문의 일부가 아니므로 add constraint에는 사용할 수 없습니다.