본문 바로가기
MySql

MySQL 하나의 테이블에 두 개의 MySQL 타임 스탬프 열

by 베이스 공부 2020. 10. 3.
반응형

"생성됨"열과 "업데이트 됨"열이 모두있는 테이블을 만들고 싶습니다. "생성됨"열은 삽입시 설정되며 변경되지 않습니다. 행이 업데이트 될 때마다 "업데이트 됨"열이 변경됩니다. 후속 INSERT 또는 UPDATE 문에서 이러한 열 중 하나를 엉망으로 만들고 싶지 않습니다. 그렇다면 이와 같은 것으로 시작하면 CREATE TABLE 문이 어떻게 생겼을까 요?

CREATE TABLE IF NOT EXISTS `mydb`.`mytable` (
  `id` INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
  `updated` TIMESTAMP,
  `created` TIMESTAMP,
  `deleted` TINYINT DEFAULT 0,
  `notes` TEXT DEFAULT '',
  `description` VARCHAR(100)
) TYPE=innodb;

두 개의 TIMESTAMP 열이있는 테이블을 만드는 데 문제가있는 것 같습니다. 열이 TIMESTAMP 또는 DATETIME이든 상관없이 삽입 또는 업데이트 문에서 명시적인 지침없이 MySQL에 의해 채워지기를 원합니다.

다음과 같은 삽입을 할 수 있기를 바랍니다.

INSERT INTO `mydb`.`mytable` (notes,description) VALUES ('some note','some description');

다음과 같은 업데이트 :

UPDATE `mydb`.`mytable` SET notes=CONCAT(notes,'some more notes') WHERE id=1;

둘 다 명시 적으로 "생성 된"열을 설정하거나 삽입 또는 업데이트 문에서 "업데이트 된"열을 설정 (또는 재설정)하지 않아도됩니다.

 

해결 방법

 

테이블을 만들려면 다음을 시도하십시오.

CREATE TABLE IF NOT EXISTS db.test_table
(
Id INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
created DATETIME DEFAULT NULL,
updated TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
deleted TINYINT DEFAULT 0,
notes TEXT DEFAULT NULL,
description VARCHAR(100)
)

참고

updated TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP

이 필드를 자동으로 업데이트 할 수 있습니다.

레코드를 삽입하기 전에 트리거에 대해 다음을 설정하십시오.

DELIMITER $$

CREATE
    /*[DEFINER = { user | CURRENT_USER }]*/
    TRIGGER `db`.`on_before_insert` BEFORE INSERT
    ON `db`.`test_table`
    FOR EACH ROW BEGIN
    SET new.created = NOW();    
    END$$

DELIMITER ;

그런 다음 이것을 사용하여 다음을 삽입 할 수 있습니다.

INSERT INTO db.test_table(description) VALUES ("Description")

기록을 업데이트하려면

UPDATE db.test_table SET description = "Description 2" where Id=1

그리고 생성 및 업데이트 된 필드가 적절하게 설정됩니다.

 

참조 페이지 https://stackoverflow.com/questions/6576989

 

 

반응형

댓글