novb****
325
2021-10-27 14:50:34 작성 2021-10-27 14:54:15 수정됨
2
117

my sql delete join에 대해 질문있습니다


예를들어

1.현재 예약상품/일반상품  두개의 테이블이 있습니다

2.사용자가 환불을 요청합니다


어떤게 더좋은 방법인가요?

아니면 어떤게 현업에서 더많이 던지는 쿼리인가요?!


1.left join으로 한다

ex delete a.*,b.*,c.* from cards a left join reservation b a.id=b.id left join products c on a.id=c.cid where a.id=123

이렇게 던지면 예약/일반상품중 id값이 일치하는 테이블에서 delete가 일어나더군요


2. 코드에서 거르고 던진다

ex

if(kind=='예약')

{ 예약상품 지우기 쿼리 던지기}

else if(kind=='일반')

{ 일반상품 지우기 쿼리 던지기}


3.마이바티스/jpa

if문을이용해서 나눈다(?)

 

join을 쓰다가 문득 궁금해져서 질문드립니다!



0
  • 답변 2

  • 시릇
    70
    2021-10-27 15:12:26

    회사 정책에 따라 다르겠지만, 실제로 어떤 상품에 대한 구매 취소가 일어날 때, 예약이든 일반이든 이미 저장된 데이터를 지우는 방식은 사용하지 않는 것이 보통입니다

    왜냐하면, 취소 건을 다시 무를 수도 있고 나중에 정산 할 때 어떤 건 수가 많이 취소 되었는지 통계를 낼 때를 대비해서 모든 내역을 보관해두어야 할 필요가 있거든요

    그래서 데이터 자체를 지우지 않고 그냥 취소 상태를 체크하는 컬럼 값을 두고 이를 업데이트 하는 방식으로 하는 편입니다


    그래도 삭제를 해야겠다 싶으면,

    해당 join 문은 사용 하기보다 (질문자님 처럼 특정 아이디 값이 일치하는 모든 데이터가 삭제될 수 있음) 해당 상품에 관련된 테이블만 delete 하는 편입니다.

    delete 문은 언제나 신중해야 하기 때문에 저 같은 경우는 대체로 복잡한 쿼리를 사용하지 않습니다.

  • novb****
    325
    2021-10-27 16:23:07 작성 2021-10-27 16:23:58 수정됨

    답변감사합니다 

    안그래도 다음질문으로 

    실제로 상품이든예약이는 취소가 일어나면 

    db는 delete를 하는지 물어보려했는데

    답변이 되었네요 

    역시 지우진 않군요 

    중요한거 배운거같습니다

    delete는 신중히 미리 알아서 다행인거 같습니다


  • 로그인을 하시면 답변을 등록할 수 있습니다.