2013-03-21 1 views
0

안녕하십니까, MySQLTRIGGERS을 사용하고 있습니다. 을 사용하고 있습니다. MySQL 5.5.8, 테이블이 있습니다. MySQL이 허용되지 않습니다 CHECK 제약 조건, 입력 값을 잘못 입력하면 입력 값을 확인하려면 TRIGGER을 사용했습니다. 나는 메시지를주고 테이블에 레코드 삽입을 시도했습니다. 하지만 내 TRIGGER을 무시하고, 잘못된 데이터가 포함되어 있으면 테이블에 레코드를 삽입하십시오.작동하지 않는 테이블에 삽입을 중지하려면 트리거를 사용하십시오.

테이블

CREATE TABLE pupil_data 
(
PupilID int(10) NOT NULL AUTO_INCREMENT, 
PupilForeName varchar(255) NOT NULL, 
PupilLastName varchar(255) NOT NULL, 
Gender CHAR(1), 
DateOfBirth DATE , 
PhoneNumber int(10) , 
FamilyID int(10) NOT NULL, 
PRIMARY KEY (PupilID), 
FOREIGN KEY (FamilyID) REFERENCES family_data(FamilyID) 
ON DELETE CASCADE 
ON UPDATE CASCADE 
, 
UNIQUE (PhoneNumber) 
) ENGINE=innodb; 

트리거 내가 생년월일 (DateOfBirth)에 입력 한 값이 4 개보다 문자가 있는지 확인하려면

DELIMITER $$ 
CREATE TRIGGER `check_pupil_before_insert` BEFORE INSERT ON `pupil_data` 
FOR EACH ROW BEGIN 
    IF CHAR_LENGTH(NEW.DateOfBirth) < 4 THEN 
     SIGNAL SQLSTATE '12345' 
     SET MESSAGE_TEXT := 'check constraint on pupil_data.DateOfBirth failed' 
    END IF; 
END$$ 
DELIMITER ; 

, 다음 레코드를 삽입하지 마십시오을 제공 오류 메시지가 표시됩니다.

enter image description here

DateOfBirth의 값은 0, 그래서 나는 그것이 오류를 제공,하지만 당신은 그것을 무시하고 실행 볼 수 있어야 가정합니다.

이유가 무엇입니까, 내가 잘못하고 있습니다. 제발 도와주세요. 미리 감사드립니다.

UPDATE

enter image description here

+1

insert 문은 경고를 표시합니다.'show warnings'을 시도 했습니까? –

+1

'trigger'를 생성하는 중 에러가 발생하면'세미 콜론 '을 빠뜨린 것 같습니다. 확인하십시오. – Ranjith

+0

@ranjith, 그 방법을 보여주세요. –

답변

3

트리거의 해상력이 잘못되었습니다. 날짜 데이터 형식을 사용하고 있으며 문자 길이를 확인하고 있습니다.

그래서 당신의 트리거 해상력이

CREATE TRIGGER `check_pupil_before_insert` BEFORE INSERT ON `pupil_data` 
FOR EACH ROW BEGIN 
IF NEW.DateOfBirth = '0000-00-00' THEN 
    SIGNAL SQLSTATE '12345' 
    SET MESSAGE_TEXT = 'check constraint on pupil_data.DateOfBirth failed'; 
END IF; 
END$$ 

처럼해야하는 기본적으로 MySQL은 '0000-00-00'와 같은 날짜를 입력 플러스 당신의 구문이 잘못 때문에 아마 잘못 ...이 시도 ..

+0

: (DateOfBirth에 0000-00-00을 주었더라도 성공합니다.) –

+0

데이터베이스에서 트리거 정의를 확인 했습니까? 또한 내 데이터베이스 에서이 제약 조건을 사용하고 매력처럼 작동 – alwaysLearn

+0

그걸 어떻게 확인할 수 있습니까? –

관련 문제