반응형
내 데이터베이스에 두 개의 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
반응형
'MySql' 카테고리의 다른 글
MySQL What is the difference between BIT and TINYINT in MySQL? (0) | 2020.11.23 |
---|---|
MySQL PHP-잘못된 사용자 이름 / 암호-올바르게 에코하는 방법 (0) | 2020.11.23 |
MySQL mysql 워크 벤치 "mysql 서버와의 연결 끊김" (0) | 2020.11.23 |
MySQL GoLang 쿼리에 변수 전달 (0) | 2020.11.23 |
MySQL Codeigniter 검색 상자 또는 검색 양식 (0) | 2020.11.23 |
댓글