>

mysql 데이터베이스 (VERSION 5.7)를 사용하고 있습니다.

다음 CREATE 명령으로 테이블을 만들었습니다 :

CREATE TABLE `attendance` (
  `id` varchar(11) NOT NULL,
  `hash` char(8) NOT NULL,
  `time_in` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP,
  `time_out` datetime DEFAULT NULL,
  `time_spent` time DEFAULT NULL,
  `purpose` char(10) NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=latin1;

이것은 매일 사람의 출석을 기록하는 데 사용됩니다.

초기 로그인시 ( 'id', 'hash', 'time_in', 'purpose') INSERTED (예 : INSERT INTO attendance(id,hash,time_in,purpose) VALUES('RSK17CS036','123456',CURRENT_TIMESTAMP,'1234567890'); ) )

로그 아웃시 ( 'time_out') 업데이트 됨 (즉, UPDATE attendance SET time_out=CURRENT_TIMESTAMP WHERE id=(specified id); )

time_spent를 time_spent = TIMEDIFF (time_out, time_in)로 계산합니다

똑같이하려면 다음 명령으로 트리거를 실행하십시오.

DELIMITER $$
CREATE TRIGGER test_trigger 
BEFORE UPDATE ON attendance 
FOR EACH ROW 
BEGIN 
SET NEW.time_spent=TIMEDIFF(NEW.time_out,OLD.time_in) WHERE OLD.time_spent IS NULL; 
END$$
DELIMITER ;

그러나 mysql은 다음과 같은 에러를 발생시킨다 :

ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'WHERE OLD.time_spent IS NULL; END' at line 1

(where 조건은 현재 요일 레코드 만 업데이트되도록합니다)

여기서 내가 뭘 잘못하고 있니?


  • 답변 # 1

    WHERE 를 사용할 수 없습니다   SET 가있는 절  방아쇠 안에. IF 사용  대신 :

    DELIMITER $$
    CREATE TRIGGER test_trigger 
    BEFORE UPDATE ON attendance 
    FOR EACH ROW 
    BEGIN
        IF OLD.time_spent IS NULL THEN
            SET NEW.time_spent = TIMEDIFF(NEW.time_out, OLD.time_in);
        END IF;
    END$$
    DELIMITER ;
    
    

관련 자료

  • 이전 Laravel 60에서 SweetAlert2를 설치할 수 없습니다
  • 다음 javascript - 대상 요소에 관계없이 배열 onClick의 마지막 요소로 설정되는 setState