트랜잭션이 삽입/업데이트/삭제 될 때 업데이트해야하는 quantity_on_hand
열이있는 제품 테이블이 있습니다. 삽입 테이블에서 트랜잭션의 수량으로 필드를 줄이고 업데이트에서 트랜잭션 내에서 NEW
및 OLD
값을 줄이고 추가했습니다. DELETE
트리거에서 나는 단순히 OLD
트랜잭션 값을 기반으로 주식을 추가했습니다.MySQL 삭제 트리거가 다른 테이블 열을 업데이트하지 않음
INSERT
및 UPDATE
트리거가 정상적으로 작동하지만 DELETE
트리거가 올바르게 업데이트되지 않고 오류가 발생하지 않습니다.
INSERT 트리거 (작업)
CREATE TRIGGER `tr_stockout_ai` AFTER INSERT ON `stockout`
FOR EACH ROW BEGIN
UPDATE stockin SET qoh = qoh - NEW.qty WHERE id_stockin = NEW.id_stockin;
END;
$$
UPDATE 트리거 (작업)
CREATE TRIGGER `tr_stockout_au` AFTER UPDATE ON `stockout`
FOR EACH ROW BEGIN
UPDATE stockin SET qoh = qoh + OLD.qty WHERE id_stockin = OLD.id_stockin;
UPDATE stockin SET qoh = qoh - NEW.qty WHERE id_stockin = NEW.id_stockin;
END;
$$
트리거를 삭제하도록 구성
대로 작동하지 않는 : 여기에 코드입니다CREATE TRIGGER `tr_stockout_ad` AFTER DELETE ON `stockout`
FOR EACH ROW BEGIN
UPDATE stockin SET qoh = qoh + OLD.qty WHERE id_stockin = OLD.id_stockin;
END;
$$
아무에게도 내가 여기에없는 것을 말해 줄 수 있습니까? 구문 오류가없고 코드가 트리거를 잘 생성하고 있으며 트리거가 실행 중이고 MySQL이 오류 코드를보고하지 않을 때 오류가 표시되지 않습니다. AFTER
에서 BEFORE
으로 변경하려고 시도했지만 문제는 같습니다. 행을 삭제 한 후에 qoh
의 값은 동일하게 유지됩니다!
이 문제는 계속 발생합니다. MySQL 5.5를 실행하는 cPanel 기반 환경에서 다른 MySQL 데이터베이스 서버에서 테스트했습니다. 내 개발 서버와이 프로덕션 서버의 환경은 거의 같으며 문제는 같습니다. VARIABLE_NAME 값 innodb_version 1.1.8 버전 5.5.22-CLL version_comment의 MySQL 커뮤니티 서버 (GPL)
업데이트 : 삭제 명령이에 주어진 될 때 DELETE 트리거가 이 완벽하게 정상적으로 수행 stockout
표 즉 delete from stockout where id_stockout=12
입니다. 그러나이 stockout
테이블에서 계단식 삭제가있는 테이블의 행을 삭제할 경우 계단식 삭제가 작동하지만 stockout
의 삭제 트리거가 실행되고 있지 않습니다. 예 : 테이블 salesinv_det_items
은 stockout
에 외래 키로 기본 키를 가지고 있으며 관계는 계단식입니다. salesinv_det_items
에서 행을 삭제할 때마다 stockout
에있는 해당 외래 키 행은 삭제되지만 stockout
에 대한 삭제 트리거는 실행되지 않습니다.
VARIABLE_NAME \t 값 innodb_version \t 1.1.8 의 protocol_version slave_type_conversions \t 버전 \t 5.5.22-CLL version_comment \t의 MySQL 커뮤니티 서버 (GPL) version_compile_machine \t x86_64에 리눅스 – somnath
\t version_compile_os "현재, 계단식 외래 키 동작은 트리거를 활성화하지 않습니다. " 이 버그로 내 데이터베이스가 죽습니다. Thay는 설명서에 정보를 추가하고 아무 것도 수정하지 않았습니다. – boreq
@ficiek 여기가 같아요! 나는 그들이 세계의 나머지 부분이 가지고있는 최소한을 제공하지 못할 때 트리거와 외래 키를 제공하게 된 원인을 모른다. 그리고 그들은 MS SQL, Sybase, DB2 등과 비교합니다. 또 다른 몇 년 그리고 그 버그와 함께 사는 십년 될 것입니다! 업계에서는 이러한 취약점을 강조하여 비즈니스에서 금전적 인 손실을 유발하여 리소스를 투자하여이 버그를 해결하도록해야합니다. 그렇지 않으면 나는 그들이 오랫동안 그것을 고치지 않고 잘 살고 있다고 생각합니다. 그 수치심은 정말로! – somnath