반응형
"생성됨"열과 "업데이트 됨"열이 모두있는 테이블을 만들고 싶습니다. "생성됨"열은 삽입시 설정되며 변경되지 않습니다. 행이 업데이트 될 때마다 "업데이트 됨"열이 변경됩니다. 후속 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
반응형
'MySql' 카테고리의 다른 글
MySQL 매우 간단한 사이트를위한 PHP 관리 백엔드 구축 (0) | 2020.10.03 |
---|---|
MySQL, phpMyAdmin : TIMESTAMP는 항상 NOW 함수를 실행합니다. (0) | 2020.10.03 |
MySQL 크론 작업을 사용한 일일 데이터베이스 백업 (0) | 2020.10.03 |
MySQL 데이터베이스 공급자 유형 당 허용되는 최대 매개 변수 수는 얼마입니까? (0) | 2020.10.03 |
MySQL PHP를 사용하여 자바 스크립트를 동적으로 생성하는 더 쉬운 방법 (0) | 2020.10.03 |
댓글