create table refriger (foodname char(16), foodtype char(4), expirationdate integer, thenumber char(16), foodcondition char(4), foodnumber int not null primary key, modType char(4) ); delimiter // create trigger alarm_trigger after update on refriger for each row begin insert into refriger values(old.foodname, old.foodtype, old.expirationdate, old.thenumber, old.foodcondition,old.foodnumber, '수정'); end// delimiter ; insert into refriger(foodname, foodtype, expirationdate, thenumber, foodcondition, foodnumber) values("닭다리", "육류", 7, "300g", "냉장", 1); insert into refriger(foodname, foodtype, expirationdate, thenumber, foodcondition, foodnumber) values("돼지목살", "육류", 7, "300g", "냉장", 2); insert into refriger(foodname, foodtype, expirationdate, thenumber, foodcondition, foodnumber) values("브로콜리", "야채", 21, "1개", "냉장", 3); insert into refriger(foodname, foodtype, expirationdate, thenumber, foodcondition, foodnumber) values("피망", "야채", 7, "300g", "냉장", 4); insert into refriger(foodname, foodtype, expirationdate, thenumber, foodcondition, foodnumber) values("채끝살", "육류", 7, "300g", "냉장", 5); insert into refriger(foodname, foodtype, expirationdate, thenumber, foodcondition, foodnumber) values("대패삼겹살", "육류", 60, "500g", "냉동", 6); update refriger set expirationdate = 5 where foodname ="닭다리"; select * from refriger; 이렇게 만들었는데 이걸 하면 can't update table in stored function/trigger because it is already used by statement 라는 오류가 발생합니다.
인터넷에서 검색해보니까
"발생의 내용은 결국 트리거 사용함에있어서 재귀용법은 사용이 안됩니다. trgtlbltmp 트리거가 걸려있는 tnltmp 테이블에 trgtnltmp 트리거는 insert, update, delete 는 할수없습니다.
에러문구는 그에 따른 문법오류를 말합니다."
라고는 하는데 제 생각에는 책에서 한거처럼하면 서로 데드락 안걸리고 사용할수있게 한게 new와 old를 사용해서 하면 가능한거처럼 되있는데
old를 사용해도 왜 재가 만든건 안되는지 이해가 안되네요 ㅠㅠ 책에서는 가능한데 왜 제가만든건 안되는지 이해가 안갑니다.
책에서는
use sqlDB; drop table buyTbl; create table backup_userTbl ( userID CHAR(8) NOT NULL PRIMARY KEY, name VARCHAR(10) NOT NULL, birthYear INT NOT NULL, addr CHAR(2) NOT NULL, mobile1 CHAR(3), mobile2 CHAR(8), height SMALLINT, mDate DATE, modTyoe char(2), modDate date, modUser varchar(256) ); delimiter // create trigger backUserTbl_UpdateTrg after update on userTbl for each row begin insert into backup_userTbl values ( old.userID, old.name, old.birthYear, old.addr, old.mobile1, old.mobile2, old.height, old.mdate, '수정', curdate(), current_user()); end // delimiter ;
이렇게 되있는데 다른게 없는게 같은데 안되서 너무 답답합니다 ㅜㅜ 5시간 넘게 아무리 머리를 굴려도 해결이 안되네요 고수님들 부탁드립니다 ㅠㅠ