2014-07-21 2 views
0

좋아, 발생하는 변경 내용을 추적하려면 다른 테이블로 테이블에 이전 날짜를 삽입합니다 MySQL에서 방아쇠를 만들려고합니다. 다음 표는 내가 가지고있는 것입니다. users 테이블을 변경할 수는 없지만 user_changes 테이블을 변경할 수 있습니다. 아래에서이 트리거를 만들었지 만 insert 문을 사용하여 줄에서 오류를 계속 발생시킵니다.Mysql 트리거 특정 열 업데이트에 다른 테이블에 레코드 삽입

사용자 : ID가, StoreNbr는, UserNbr는, LvlNbr는 Paid1, Paid2가 user_changes : ID가, store_nbr는, user_number는, LEVEL_NUMBER는 OldPaid1, OldPaid2는,

DROP TRIGGER IF EXISTS usersToChanges; 
CREATE TRIGGER `usersToChanges` AFTER UPDATE ON users FOR EACH ROW 
BEGIN 
IF LENGTH(CONV(NEW.Status, 10, 2)) NOT IN (5,6,8) AND (NOT(NEW.Paid1 <=> OLD.Paid1) OR NOT(NEW.Paid2 <=> OLD.Paid2)) 
    THEN 
     INSERT INTO user_changes (store_nbr, user_number, level_number, OldPaid1, OldPaid2, created) 
     VALUES (OLD.StoreNbr, OLD.UserNbr, OLD.LvlNbr, OLD.Paid1, OLD.Paid2, NOW()); 
    END IF; 
END; 
+0

무엇이 오류입니까? –

+0

SQL SYNTAX ERROR on line six; – chrisShick

+0

mysql 커맨드 라인 클라이언트 나 phpMyAdmin과 같은 GUI 또는 애플리케이션 코드에서 이것을 실행하고 있습니까? –

답변

1

를 만드는 당신은 DELIMTER command를 사용할 필요가 절차 코드를 정의하려면 다음을 입력하십시오.

DROP TRIGGER IF EXISTS usersToChanges; 
DELIMITER $$ 
CREATE TRIGGER `usersToChanges` AFTER UPDATE ON users FOR EACH ROW 
BEGIN 
IF LENGTH(CONV(NEW.Status, 10, 2)) NOT IN (5,6,8) AND (NOT(NEW.Paid1 <=> OLD.Paid1) OR NOT(NEW.Paid2 <=> OLD.Paid2)) 
    THEN 
     INSERT INTO user_changes (store_nbr, user_number, level_number, OldPaid1, OldPaid2, created) 
     VALUES (OLD.StoreNbr, OLD.UserNbr, OLD.LvlNbr, OLD.Paid1, OLD.Paid2, NOW()); 
    END IF; 
END $$ 
DELIMITER ; 

세미콜론은 일반적으로 절차 코드가 아닌 단일 명령을 구분합니다. END;END $$으로 변경하여 트리거를 어떻게 완료했는지 확인합니다. 그런 다음 세미콜론의 기본 구분 기호로 다시 전환했습니다.

+0

이 오류가 발생했습니다. 'DELIMTER $$ 각 트리거에 대해 사용자가'사용자 토큰을 다시 작성합니다 '라는 메시지가 표시됩니다. BEGIN'at line 1 – chrisShick

+0

죄송합니다. 'DELIMITER'가 잘못 입력되었습니다. 다시 시도하십시오. – RolandoMySQLDBA

관련 문제