transaction 에서 destroy

배병일 ㅣ 2023. 7. 29. 00:23

a 라는 함수가 실행 되었을때 

 

test1 테이블에서 id가 1인 놈을 삭제

 

test2 테이블에서 id가 2인 놈을 삭제

 

a = async (id) => {
    const transaction = await sequelize.transaction();
    try {
      await test1.destroy(
        {
          where: { id },
        },
        { transaction }
      );

      await test2.destroy(
        {
          where: { id },
        },
        { transaction }
      );

      await transaction.commit();
    } catch (err) {
      await transaction.rollback();
    }
  };
}

이렇게 코드를 짰는데 계속 rollback 함수가 실행됨.

 

어디서 rollback 되는지 터미널 창을 보니 test1.destroy 부분에서 실패함.

 

이때 err 를 콘솔로 찍어봤어야 했는데 그 생각은 전혀 하지못함..

 

그렇게 2~3시간을 날리고

 

다른분께 여쭤보니 err를 한번 찍어보자 하심.

 

Cannot delete or update a parent row: a foreign key constraint fails

이런 에러가 떠서 구글링 해보니 관계설정때문이라 함..

 

그래서 아차 든 생각이 test2에 있는 id가 test1의 id를 참조하도록 관계설정을 함..

 

즉 test2의 id 는 test1의 id가 존재해야 하는데 

 

코드 상에서 test1의 id를 삭제할려고 하니 당연히 실패하는 것임..

 

test1과 test2 삭제 순서를 바꿔주니 아주 잘 돌아감.. ^^

'긁적..' 카테고리의 다른 글

티스토리 단축키  (0) 2023.08.04
프로퍼티 ( PROPERTY )  (0) 2023.08.02
home 버튼 / prev,next 버튼 ( 해결 )  (0) 2023.06.08
home 버튼 / prev,next 버튼  (1) 2023.06.07
상세페이지 연결 localStorage / setTime, getTime  (0) 2023.06.05