datetime이고 null 일 수없는 "start_date"라는 열이 포함 된 테이블이 있습니다. 하나의 단일 업데이트 쿼리에서 모든 날짜 시간에 한 시간을 추가하고 싶지만 오류 메시지가 나타납니다.Column 'start_date' cannot be null
MySQL 5.7.17과 다음 쿼리를 사용하고 있습니다.
UPDATE tbl_event SET start_date = DATE_ADD(start_date, INTERVAL 1 HOUR);
한 행에서 수행 할 때는 잘 작동하지만 모두 변경하고 싶을 때는 작동하지 않습니다. 여기에 뭔가 빠졌나요?
편집 : 다음은 테이블의 생성 구문입니다.
CREATE TABLE `tbl_event` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`created_by` int(11) DEFAULT NULL,
`name` varchar(255) COLLATE utf8mb4_unicode_ci DEFAULT NULL,
`start_date` datetime NOT NULL,
`end_date` datetime NOT NULL,
PRIMARY KEY (`id`),
KEY `FK_EVENT_CREATED_BY` (`created_by`),
CONSTRAINT `FK_EVENT_CREATED_BY` FOREIGN KEY (`created_by`) REFERENCES `tbl_user` (`id`) ON DELETE SET NULL,
) ENGINE=InnoDB AUTO_INCREMENT=442 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
매우 이상한 일이 일어나지 않는 한, 문제를 일으킬 수있는 유일한 것은 start_date
한 시간을 추가하면 NULL이 생성 될 수있는 값이 하나 이상 (NULL이 아닌) 값이있는 경우입니다.
datetime
예를 들어 유효한 범위를 넘어 결과를 푸시 할 수있는 값이있을 수 있습니다 . 특정 MySQL 버전에서 문제를 재현 할 것이라고 생각합니다.
(이제 주석에서 명확하게했으며 GhostGambler가 제안한대로 값은 에서 0000-00-00 00:00:00
생성하는 것을 포함하여 이상한 동작을 보이는 오래된 MySQL "제로 날짜"( ) 였습니다.)NULL
DATE_ADD
문제를 일으키는 값이있는 행을 찾을 수 있습니다.
SELECT * FROM tbl_event WHERE DATE_ADD(start_date, INTERVAL 1 HOUR) IS NULL;
... 찾은 내용에 따라 데이터 또는 쿼리를 수정하는 작업을 수행합니다.
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다