일련의 기록 트리거를 설정하여 트리거를 통해 지정된 테이블의 기록을 자동으로 수집하려고합니다. 누군가가 앱에 저장하는 것에 대해 잊어 버렸 든 관계없이 모든 변경 사항을 캡처한다는 것을 보장하므로 트리거를 사용하고 싶습니다. 내 문제는 내가이 방아쇠를 당긴다는거야.MySQL에서 트리거로 레코드를 삭제 한 사용자의 USER_ID를 저장합니다.
CREATE TRIGGER `db`.`delete_history_trigger` BEFORE DELETE ON `db`.`payments`
FOR EACH ROW BEGIN
INSERT INTO `payments_history` select *, 'delete', NOW(), USER() from `payments` where `PAYMENT_ID` = OLD.`PAYMENT_ID`;
END
//
payments_history
에 payments
에서이 물건의 모든 및 수행 된 작업을 채우고, 액션이 발생한 날짜/시간, 작업의 원인이 된 MySQL 사용자가 수행한다. 내 앱의 각 사용자는 저장하려는 USER_ID
(users
테이블의 사용자)이 있습니다. 업데이트의 경우 USER_ID
은 update
쿼리에 사용되는 하나의 필드이므로 문제가되지 않습니다. 그러나 삭제시 전달되는 데이터가 없으므로 NEW는 액세스 할 수 없으므로 액세스 할 수 없습니다. USER_ID
레코드를 업데이트하는 두 번째 쿼리를 수행하는 짧은 삭제 기록 테이블에 저장할 좋은 방법을 생각할 수 없습니다. 다른 사람들이 삭제 후 해당 레코드를 업데이트하는 메서드를 호출하는 것을 잊어 버릴 수 있으므로 데이터를 잃어 버릴 수도 있으므로이 솔루션을 사용하지 않을 것입니다.
과 같이, @USER_ID = SET? –
baudtack