2013-07-08 4 views
1

대학 데이터가있는 데이터베이스가 있습니다. 나는 대학과 학생 2 테이블을 포함하는 방아쇠를 만들고 싶습니다.MySQL에서 트리거가 작동하지 않습니다.

CREATE TABLE IF NOT EXISTS `university` (
`name` varchar(80) COLLATE utf8_bin NOT NULL, 
`uni_id` int(11) NOT NULL, 
`students` int(11) NOT NULL, 
PRIMARY KEY (`uni_id`) 
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin; 
CREATE TABLE IF NOT EXISTS `student` (
`firstName` varchar(20) COLLATE utf8_bin NOT NULL, 
`lastName` varchar(20) COLLATE utf8_bin NOT NULL, 
`student_id` int(11) NOT NULL, 
`id_number` varchar(100) COLLATE utf8_bin NOT NULL, 
`current_address` varchar(100) COLLATE utf8_bin NOT NULL, 
`current_phone` varchar(16) COLLATE utf8_bin NOT NULL, 
`date_of_birth` date NOT NULL, 
`gender` varchar(100) COLLATE utf8_bin NOT NULL, 
`year_of_study` int(11) NOT NULL, 
`department_id` int(11) NOT NULL, 
`uniId` int(11) NOT NULL, 
`study_cycle` varchar(50) COLLATE utf8_bin NOT NULL, 
PRIMARY KEY (`student_id`,`id_number`), 
UNIQUE KEY `student_id` (`student_id`), 
UNIQUE KEY `id_number` (`id_number`), 
KEY `lastName` (`lastName`), 
KEY `uni_id` (`uniId`), 
KEY `uniId` (`uniId`) 
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin; 

나는 테이블 student에 새 항목이 후 트리거가 테이블 universitystudents 증가합니다.

CREATE TRIGGER s AFTER 
INSERT ON student 
FOR EACH ROW 
BEGIN 
UPDATE university SET students=students+1 
WHERE uni_id=NEW.uni_id; 
END; 

실행하려고하면 오류가 발생합니다. 내가 도대체 ​​뭘 잘못하고있는 겁니까?

답변

0

을 할 수 NEW.uni_idNEW.uniId에 :

CREATE TRIGGER s AFTER 
INSERT ON student 
FOR EACH ROW 
    UPDATE university 
    SET students=students+1 
    WHERE uni_id=NEW.uniId 
; 

하거나 해당 필드의 이름을 변경한다 student 테이블에.

피들은 here입니다.

+0

오, 고맙습니다, 지금 작동합니다! – user2562246

1

; 이외의 다른 구분 기호를 설정하지 않으면 명령문은 ;으로 끝나고 트리거 정의가 완료되지 않습니다. MySQL에 선언문이 정의 된 구분 기호로 끝나야한다고 말해야합니다. 그 후 당신은 다시 delimiter ;

delimiter // 
CREATE TRIGGER s BEFORE INSERT ON student 
FOR EACH ROW 
BEGIN 
    UPDATE university 
    SET students = students + 1 
    WHERE uni_id = NEW.uniid; 
END// 
delimiter ; 

로 구분 기호를 설정 (그리고 BEFORE 트리거 변경 시도) 당신은 변경해야

+0

그 후에는 중요하지 않아야하고 테이블에 제약 조건을 부여하면 나중에 사용할 수 있습니다 ... –

+0

괜찮아요, 구문은 없지만 # 1054 - 'NEW'에서 알 수없는 열 'uni_id'라고 말합니다. – user2562246

관련 문제