1
아래에 설명 된대로 테이블이 있고 BEFORE INSERT 트리거를 사용하여 열 값을 세션 정의 변수로 업데이트합니다. INSERT 세트는 modified_by_user 및 created_by_user 열을 모두 예상대로 1로 설정합니다. 그러나 UPDATE는 modified_by_user를 예상대로 2로 변경하지 않지만 1로 유지합니다. BEFORE UPDATE ON을 사용하여 열 값을 업데이트하는 방법은 무엇입니까? 나는 MySQL 5.5를 사용하고있다. 조회가 지정된 열 값을 지정하지 않을 경우 감사BEFORE UPDATE ON을 사용하여 열 값 업데이트
대해 UPDATE에SET @users_id=1;
INSERT INTO notes(notes,record_status_id,date_created) VALUES("hello","active",NOW());
//modified_by_user=1, created_by_user=1, notes="hello"
SET @users_id=2;
UPDATE notes SET notes="goodby" WHERE id=1;
//modified_by_user=1, created_by_user=1, notes="goodby"
CREATE TABLE IF NOT EXISTS `notes` (
`id` INT UNSIGNED NOT NULL AUTO_INCREMENT ,
`notes` TEXT NULL ,
`record_status_id` VARCHAR(8) NOT NULL ,
`date_created` DATETIME NOT NULL ,
`date_modified` TIMESTAMP NOT NULL ,
`modified_by_user` INT UNSIGNED NULL ,
`created_by_user` INT UNSIGNED NULL ,
PRIMARY KEY (`id`) ,
INDEX `fk_notes_users1_idx` (`modified_by_user` ASC) ,
INDEX `fk_notes_users2_idx` (`created_by_user` ASC) ,
INDEX `fk_notes_record_status1_idx` (`record_status_id` ASC) ,
CONSTRAINT `fk_notes_users10`
FOREIGN KEY (`modified_by_user`)
REFERENCES `users` (`id`)
ON DELETE NO ACTION
ON UPDATE NO ACTION,
CONSTRAINT `fk_notes_users20`
FOREIGN KEY (`created_by_user`)
REFERENCES `users` (`id`)
ON DELETE NO ACTION
ON UPDATE NO ACTION,
CONSTRAINT `fk_notes_record_status1`
FOREIGN KEY (`record_status_id`)
REFERENCES `record_status` (`id`)
ON DELETE NO ACTION
ON UPDATE NO ACTION)
ENGINE = InnoDB;
DELIMITER $$
CREATE TRIGGER tg_notes_ins BEFORE INSERT ON notes FOR EACH ROW
BEGIN
IF NEW.created_by_user IS NULL OR NEW.created_by_user = '' THEN
SET NEW.created_by_user = @users_id;
SET NEW.modified_by_user = @users_id;
END IF;
END$$
CREATE TRIGGER tg_notes_upd BEFORE UPDATE ON notes FOR EACH ROW
BEGIN
IF NEW.modified_by_user IS NULL OR NEW.modified_by_user = '' THEN
SET NEW.modified_by_user = @users_id;
END IF;
END$$
DELIMITER ;
NEW 별칭을 사용하려면 AFTER UPDATE 트리거가 필요하다고 생각합니다. – SomeSillyName
@SomeSillyName. AFTER UPDATE를 사용하면 트리거에서 UPDATE가 필요하지 않으며 다른 트리거를 트리거하지 않습니까? 또한, 그것은 BEFORE를 사용하여 INSERT와 함께 작동하며, 나는 그들이 유사하다고 생각할 것입니다. – user1032531
당신 말이 맞아요. 그것은 BEFORE UPDATE 여야합니다. 그러나 삽입이 modified_by_user 값을 설정하는 경우, BEFORE UPDATE 트리거에서 테스트중인 NULL 또는 ''이 될 수 없습니다. – SomeSillyName