Program Tip

타임 스탬프 (자동)는 언제 업데이트됩니까?

programtip 2020. 11. 14. 11:01
반응형

타임 스탬프 (자동)는 언제 업데이트됩니까?


유형 테이블에 열 TIMESTAMP이 있고 기본값이 CURRENT_TIMESTAMP 인 경우 동일한 행 있는 다른 열의 값을 업데이트하면이 열이 현재 타임 스탬프로 업데이트 됩니까?
그렇지 않은 것 같지만 이것이 일어날 일인지 확실하지 않습니다.
이것이 의미하는 바를 이해할 수 없습니다 ( MySQL 문서에서 ).

열이 자동 업데이트되는 경우 행의 다른 열 값이 현재 값에서 변경 될 때 현재 타임 스탬프로 자동으로 업데이트됩니다. 다른 모든 열이 현재 값으로 설정된 경우 열은 변경되지 않은 상태로 유지됩니다. 다른 열이 변경 될 때 열이 업데이트되지 않도록하려면 명시 적으로 현재 값으로 설정하십시오. 다른 컬럼이 변경되지 않는 경우에도 컬럼을 업데이트하려면 반드시 있어야하는 값으로 명시 적으로 설정하십시오.] 2


명령을 내린다 SHOW CREATE TABLE whatever

그런 다음 테이블 정의를보십시오 .

아마 이런 줄이

logtime TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,

그것에. 명시적인 타임 스탬프 설정이없는 DEFAULT CURRENT_TIMESTAMP모든 항목 INSERT은 현재 시간을 사용합니다. 마찬가지로 ON UPDATE CURRENT_TIMESTAMP명시적인 타임 스탬프가없는 업데이트는 현재 타임 스탬프 값으로 업데이트됨을 의미합니다.

테이블을 생성 할 때이 기본 동작을 제어 할 수 있습니다.

또는 타임 스탬프 열이 처음에 올바르게 생성되지 않은 경우 변경할 수 있습니다.

ALTER TABLE whatevertable
     CHANGE whatevercolumn 
            whatevercolumn TIMESTAMP NOT NULL
                           DEFAULT CURRENT_TIMESTAMP 
                           ON UPDATE CURRENT_TIMESTAMP;

이렇게하면 테이블에 대한 INSERT 및 UPDATE 작업이 자동으로 타임 스탬프 열을 업데이트합니다. whatevertable타임 스탬프를 변경하지 않고 업데이트하려는 경우 , 즉,

다른 열이 변경 될 때 열이 업데이트되지 않도록하려면

그런 다음 이러한 종류의 업데이트를 발행해야합니다.

UPDATE whatevertable
   SET something = 'newvalue',
       whatevercolumn = whatevercolumn
 WHERE someindex = 'indexvalue'

그리고,이 작동 TIMESTAMP뿐만 아니라 열 DATETIME또는 DATE열. 열이 TIMESTAMPs 이므로 시간대가 고려됩니다. 올바르게 구성된 서버 시스템에서 해당 값은 항상 UTC로 저장되고 검색시 현지 시간으로 변환됩니다.


이처럼 타임 스탬프 열을 정의해야한다고 생각합니다.

테이블 t1 생성 
(
    ts TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
);

여기를 참조 하십시오


데이터베이스에 트리거를 추가하십시오.

DELIMITER //
CREATE TRIGGER update_user_password 
  BEFORE UPDATE ON users
  FOR EACH ROW
    BEGIN
      IF OLD.password <> NEW.password THEN
        SET NEW.password_changed_on = NOW();
      END IF;
    END //
DELIMITER ;

비밀번호 변경 시간은 비밀번호 항목이 변경된 경우에만 업데이트됩니다.


자동 업데이트 된 열은 행에있는 다른 열의 값이 현재 값에서 변경되면 현재 타임 스탬프로 자동으로 업데이트됩니다. 다른 모든 열이 현재 값으로 설정된 경우 자동 업데이트 된 열은 변경되지 않은 상태로 유지됩니다.

이를 설명하기 위해 행이 하나만 있다고 가정 해 보겠습니다.

-------------------------------
| price | updated_at          |
-------------------------------
|  2    | 2018-02-26 16:16:17 |
-------------------------------

이제 다음 업데이트 열을 실행하면 :

 update my_table
 set price = 2

가격 값이 실제로 변경되지 않았으므로 (이미 2) updated_at 값을 변경하지 않습니다.

그러나 가격 값이 2가 아닌 다른 행이있는 경우 해당 행의 updated_at 값 (가격 <> 3)이 CURRENT_TIMESTAMP로 업데이트됩니다.


Adding where to find UPDATE CURRENT_TIMESTAMP because for new people this is a confusion.

Most people will use phpmyadmin or something like it.

Default value you select CURRENT_TIMESTAMP

Attributes (a different drop down) you select UPDATE CURRENT_TIMESTAMP

참고URL : https://stackoverflow.com/questions/18962757/when-is-a-timestamp-auto-updated

반응형