나는 MySQL 테이블에 트리거를 가지고 있습니다. 표에는 약 20 개의 열이 있습니다.하나의 열 대신에 모든 업데이트에서 트리거 실행
DELIMITER $$
CREATE
DEFINER=`root`@`localhost`
TRIGGER `completion_date_update`
BEFORE UPDATE ON `orders`
FOR EACH ROW
BEGIN
IF NEW.`order_status` = 'COMPLETED' THEN
SET NEW.`completion_date` = NOW();
END IF;
IF NEW.`order_status` != 'COMPLETED' THEN
SET NEW.`completion_date` = NULL;
END IF;
END$$
는 내가 원하는이 트리거가 completion_date
열 열 order_status
만 업데이트됩니다 업데이트하는 것입니다. 다른 열이 업데이트되면이 트리거는 아무 것도해서는 안됩니다.
실제로이 트 리거는 열 업데이트시 completion_date
을 업데이트합니다.
누구나 내게 설명 할 수 있습니까? 왜 이런 일이 일어나고 무엇이 잘못 되었습니까?
order_status
열은 NULL NOT이며, 다음과 같이 사용할 수있는 값이 있습니다
enum('NEW','OPEN','COMPLETED','CANCELLED','REPLACED')
기본이 'NEW'
감사
은 'order_status'가 nullable입니까? 열의 값이 이미 'completed'로 표시되어 있고 다른 열에 만 upting하면 트리거가 실행됩니까? –
5 가지 옵션이있는 ENUM입니다. 난 그냥 NULL로 설정합니다. 나는 지금 그것을 시험 할 것이다. – 6bytes
@JW. 나는'order_status' 컬럼 세부 사항으로 나의 질문을 업데이트했다. – 6bytes