source

지정된 행을 삽입할 때 MariaDB는 타임스탬프를 저장합니까?

factcode 2022. 11. 25. 20:48
반응형

지정된 행을 삽입할 때 MariaDB는 타임스탬프를 저장합니까?

저는 MariaDB를 사용하여 큐를 에뮬레이트하는 레거시 애플리케이션을 취급하고 있습니다.중요한 점 중 하나는 원래 설계가 큐에 메시지가 삽입된 시간을 삽입하지 않는다는 것입니다. 즉, 메시지가 처리되는 순서가 보장되지 않습니다.

현재 MariaDB 인스턴스를 하나만 사용하고 있기 때문에 메시지가 순서대로 처리되고 있는 것 같습니다만, 이 작업을 계속하기 위해 created_on 열을 추가하고 싶습니다.

질문입니다만, created_on 컬럼을 다시 채워야 하는데, MariaDB가 지정된 행을 데이터베이스에 삽입한 시간을 저장했는지 궁금했습니다.

스키마에 포함되지 않는 한 가능성이 낮지만 때때로 데이터베이스는 이러한 종류의 것을 캡처하는 비표준 확장자를 가질 수 있습니다.예를 들어 Oracle은 이와 유사한 기능을 가지고 있습니다.

MariaDB에는 숨겨진 타임스탬프가 없습니다.테이블에 AUTO_INCREMENT 가 설정되어 있는 경우는, 시간이 아니고 순서를 요구하고 있기 때문에, 이것으로 충분할 가능성이 있습니다.

MySQL/MariaDB를 통한 큐잉에 대한 나의 견해: "큐잉하지 말고 그냥 하세요."큐잉 및 큐잉 해제 작업은 특히 최종적인 경우 부담이 될 수 있습니다.

네, 필드를 작성할 경우 필드를 작성할 때 다음 항목이 있는지 확인합니다.

create table test_created_on_table( 
  created_on timestamp default now() on update now() 
);

이미 필드가 있는 경우,"CURRENT_TIMESTAMP"플래그를 지정합니다.테이블에 새 레코드를 만들 때마다"NOW()"값어치를 위해.

아니면.

반대로, 이 경우,'ON UPDATE CURRENT_TIMESTAMP'플래그를 달아 송신하다NOW()그 분야에 대해서요.그게 사실 더 말이 돼요.

이것은 행이 삽입 또는 갱신되는 시기를 추적합니다.

db 트리거에는 다른 방법이 있습니다.

변경 후의 추가시간을

수정된 타임스탬프를 테이블에 추가하는 것이 가장 간단합니다.유형 필드를 생성하기만 하면 됩니다.TIMESTAMP기본적으로는 행이 변경되면 MySQL이 필드를 자동으로 업데이트합니다.

주의할 점이 몇 가지 있습니다.

  • 여러 개를 가질 수 있지만TIMESTAMP이러한 필드 중 하나만 현재 업데이트 시간으로 자동 갱신할 수 있습니다.
  • UPDATE 쿼리에 다음 값이 포함되어 있는 경우ModifiedTime드,, 이이사사 다다다다다다

따라서 변경된 타임스탬프 필드를 기존 테이블에 추가하려면 다음 작업만 수행하면 됩니다.

ALTER TABLE my_table ADD 수정 완료타임 스탬프

작성자 추가시간을

의 추가CreateTime이치노

최신 인 "MySQL" "" 할 수 .CURRENT_TIMESTAMP.에 이 에서도 CURRENT_TIMESTamp를 사용하여 여러 수 는 Modified를 .또한 MySQL의 새로운 버전에서도 CURRENT_TIMESTamp를 사용하여 여러 개의 필드를 사용할 수 없습니다.물론 수정해야 합니다.일하는 시간.

따라서 생성된 타임스탬프를 얻으려면 먼저 테이블에 DATETIME 필드를 추가해야 합니다.

ALTER TABLE my_table ADD 생성시간 날짜/시간이 NULL이 아닙니다.

다음 부품을 작동시키려면 NOT NULL로 작성해야 합니다(NOT NULL을 설정하면 자동으로 0이 기본 설정되기 때문입니다).

그런 다음 트리거를 생성해야 합니다. 트리거는 테이블에 값을 삽입하고 생성된 타임스탬프를 설정할 때 자동으로 실행됩니다.

DELIMITER //
DROP TRIGGER IF EXISTS my_table_insert_trigger//
CREATE TRIGGER my_table_insert_trigger
BEFORE INSERT ON my_table
FOR EACH ROW
BEGIN
IF NEW.CreatedTime = '0000-00-00 00:00:00' THEN
SET NEW.CreatedTime = NOW();
END IF;
END;//
DELIMITER ; 

이제 테이블에 값을 삽입하면 이 트리거가 시작되고 Created가 제공되지 않은 경우삽입 쿼리의 시간 필드. 현재 타임스탬프로 설정됩니다.

언급URL : https://stackoverflow.com/questions/29285473/does-mariadb-store-a-timestamp-when-a-given-row-is-inserted

반응형