타임 스탬프 (자동)는 언제 업데이트됩니까?
유형 테이블에 열 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
열. 열이 TIMESTAMP
s 이므로 시간대가 고려됩니다. 올바르게 구성된 서버 시스템에서 해당 값은 항상 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
'Program Tip' 카테고리의 다른 글
언제 Sql Azure를 사용해야하고 언제 Table Storage를 사용해야합니까? (0) | 2020.11.14 |
---|---|
git repo에서 파일 이름 변경 (0) | 2020.11.14 |
Cloudfront는 SSL을 사용하여 www를 네이 키드 도메인으로 리디렉션합니다. (0) | 2020.11.14 |
apk 파일을 설치하는 동안 "패키지가 손상된 것 같습니다"오류가 발생합니다. (0) | 2020.11.14 |
PHP에서 "= &"및 "& ="연산자는 무엇을 의미합니까? (0) | 2020.11.14 |