2016-10-26 2 views
0

해당 elasticsearch 인덱스와 동기화하여 MySQL 데이터베이스 테이블을 유지하고 싶습니다. 나는 내 자신의 크론 직업을 쓰려고 애 쓰고있다. MySQL 테이블에는 InnoDB 엔진이있다. 나는 updated_at 열이 CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP 인 것을 추가했습니다. 이 쿼리를 사용하여 동기화를 수행합니다.elasticsearch에 대한 MySQL의 InnoDB 테이블 : 트랜잭션 내에서 현재 업데이트 TIMESTAMP

SELECT * FROM table WHERE updated_at>=bookmark; 

일부 삽입물이 손실 된 것으로 확인되었습니다.

커밋 전에 CURRENT_TMESTAMP가 계산 되었습니까?

답변

1

CURRENT_TIMESTAMP - NOW()의 동의어 -이를 호출하는 쿼리의 실행 시작 부분에서 해당 값을 캡처합니다. 이러한 함수는 쿼리가 실행되는 시간에 관계없이 상수 값을 유지합니다. 따라서 장기 실행 업데이트와 같은 모든 영향을받는 행은 동일한 값을 가지며 각 개별 쿼리가 실행을 시작했을 때 그 값이 커밋되지 않아야합니다 시각.

NOW()은 명령문이 실행되기 시작한 시간을 나타내는 상수 시간을 반환합니다. 저장된 함수 또는 트리거 내에서 NOW()은 함수 또는 트리거 문이 실행되기 시작한 시간을 반환합니다.이 값은 실행되는 정확한 시간을 반환하는 SYSDATE()의 동작과 다릅니다.

https://dev.mysql.com/doc/refman/5.7/en/date-and-time-functions.html#function_now