본문 바로가기
MySql

MySQL: How to create trigger for setting creation date for new rows

by 베이스 공부 2020. 11. 23.
반응형

내 데이터베이스에 두 개의 TIMESTAMP 열을 만들려고 할 때 문제가 발생했습니다. 하나는 생성됨 이고 하나는 업데이트 됨 입니다. 둘 다 기본값을 CURRENT_TIMESTAMP 로 설정 한 다음 updated 열에 대해 ON UPDATE CURRENT_TIMESTAMP 로 설정하는 것이 쉬울 것이라고 생각했습니다. 그러나 어떤 이유로 MySQL은 그것이 나쁜 생각이라는 것을 의미합니다 ... 그래서 삽입 쿼리에 그중 하나를 설정하지 않고도 이것을 수행하는 방법을 찾고 있습니다.


1442-저장된 함수 / 트리거를 호출 한 명령문에서 이미 사용하고 있기 때문에 저장된 함수 / 트리거에서 '작업'테이블을 업데이트 할 수 없습니다.

그리고 나는 그것이 의미하는 바를 전혀 이해하지 못합니다. 그래서 저는 여기 누군가가이 주제를 밝힐 수 있기를 바랐습니다.

테이블과 트리거를 만드는 데 사용한 SQL은 다음과 같습니다.

CREATE TABLE `tasks` (
  `id` INT(10) UNSIGNED NOT NULL AUTO_INCREMENT,
  `created` DATETIME,
  `updated` TIMESTAMP ON UPDATE CURRENT_TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
  `title` VARCHAR(255) NOT NULL,
  `notes` TEXT,
  `status_id` INT(10) UNSIGNED NOT NULL,
  PRIMARY KEY (`id`),
  KEY `status_id` (`status_id`),
  CONSTRAINT `fk_tasks_statuses` FOREIGN KEY (`status_id`) REFERENCES `statuses` (`id`),
) ENGINE=InnoDB DEFAULT CHARSET=utf8;


CREATE TRIGGER task_creation_timestamp AFTER INSERT ON tasks 
FOR EACH ROW
UPDATE tasks SET created = updated WHERE id = NEW.id;

내가 여기서 뭘 잘못하고 있니?

 

해결 방법

 

트리거는 "삽입 전"이어야하며 UPDATE 대신 SET 을 사용해야합니다.

CREATE TRIGGER task_creation_timestamp BEFORE INSERT ON tasks 
FOR EACH ROW
SET NEW.created = NOW();

 

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

 

 

반응형

댓글