source

타임스탬프 열 업데이트 시 이상한 동작

nicesource 2022. 11. 5. 17:24
반응형

타임스탬프 열 업데이트 시 이상한 동작

다음과 같은 MariaDB-10.3.18 테이블이 있습니다.

create table switching_log
(
    item_name varchar(20) NOT NULL,
    switched_off timestamp,
    switched_on timestamp
);

select * from switching_log;
+-----------+---------------------+---------------------+
| item_name | switched_off        | switched_on         |
+-----------+---------------------+---------------------+
| 201197010 | 2019-10-01 08:36:08 | 2019-10-01 08:35:49 |
+-----------+---------------------+---------------------+

'switched_off'를 업데이트해도 'switched_on'은 변경되지 않습니다.

UPDATE switching_log set switched_off = now()   where item_name = '201197010';

select * from switching_log;
+-----------+---------------------+---------------------+
| item_name | switched_off        | switched_on         |
+-----------+---------------------+---------------------+
| 201197010 | 2019-10-01 08:40:28 | 2019-10-01 08:35:49 |
+-----------+---------------------+---------------------+

그러나 switched_on'을 업데이트하면 switched_off'도 업데이트 됩니다.

UPDATE switching_log set switched_on = now()   where item_name = '201197010';

select * from switching_log;
+-----------+---------------------+---------------------+
| item_name | switched_off        | switched_on         |
+-----------+---------------------+---------------------+
| 201197010 | 2019-10-01 08:40:40 | 2019-10-01 08:40:40 |
+-----------+---------------------+---------------------+

이 동작은 설계상입니다.

MariaDB에는 특정 테이블의 TIMESTAMP 데이터 유형을 사용하는 첫 번째 열에 대한 특별한 동작이 있습니다.특정 테이블에서 TIMESTAMP 데이터 유형을 사용하는 첫 번째 열에 대해 MariaDB는 자동으로 다음 속성을 열에 할당합니다.

DEFAULT CURRENT_TIMESTAMP
ON UPDATE CURRENT_TIMESTAMP 

즉, INSERT 또는 UPDATE 쿼리에서 열이 명시적으로 값을 할당받지 않은 경우 MariaDB는 열의 값을 현재 날짜와 시간으로 자동으로 초기화합니다.

이 문제를 해결하려면 타임스탬프 열의 "자동 값" 기능을 비활성화하십시오.가장 단순하고 예측 가능한 접근법은 다음과 같습니다.

create table switching_log
(
    item_name varchar(20) NOT NULL,
    switched_off timestamp NULL,
    switched_on timestamp NULL
);

db <> fiddle 데모

언급URL : https://stackoverflow.com/questions/58181157/strange-behavior-when-updating-timestamp-column

반응형