hodoyo
448
2021-03-15 14:10:46
11
379

같은 테이블 수정시 덮어씌워지는 경우 해결법이 있을까요?



A테이블에  no,1,2,3,4 칼럼이 있을때


no1234
1



no 1에 1,2,3,4가 공란인 데이터가 있습니다.


 A,B 사용자가 no 1를 조회했습니다. (no 1 에 1,2,3,4는 공란인상태)


A 사용자는 

no1234
1

이렇게 해서 저장을 하고 


그 다음 시간이 지나 B 사용자는



no1234
1

이렇게 저장하는데요


그럼 테이블에는 마지막에 저장한


no1234
1

만 남게되어서 1,2칼럼이 소실되게 됩니다.


이러한 경우 (1,2칼럼이 소실되지 않게 하기위해서는) 보통 해결책이 어떻게 되나요?

0
  • 답변 11

  • stheart
    37
    2021-03-15 14:16:24

    oracle 이면 merge into 쓰는데 업뎃할때는 nvl로 처리 하시면.

  • hodoyo
    448
    2021-03-15 14:19:44

    // stheart

    답변 감사합니다. 저 경우에는 그렇게 하면 처리될듯합니다.

    그런데 만약 삭제하고자 하는 마음으로 공란을 할 때에는

    삭제 처리가 안될 것 같은데 이경우 해결 방법이 있을까요?

  • stheart
    37
    2021-03-15 14:30:31

    삭제는 ui에서 다른 이벤트를 써야 겠죠?

    저장, 삭제 버튼을 둔다던지. 그래야 사용자가 명확히 버튼을 누를수 있을듯 하네요.

  • C#린이
    3k
    2021-03-15 14:32:28

    hodoyo //

    글 내용 중 이해가 안되는 부분이 있습니다.


    시간이 지나 B 사용자가 해당테이블을 처음 봤을 때는

    1,2 컬럼에 각각 가,나 값이 들어가 있을겁니다.

    그리고 B 사용자가 저렇게 저장했다면

    당연히 1,2 컬럼의 데이터값은 소실되어야 하지않나요?


    혹시 사용자별로 no 1 에 대한 데이터가 다른걸까요?

  • hodoyo
    448
    2021-03-15 14:35:41 작성 2021-03-15 14:38:00 수정됨

    C#린이//

    관심 감사드립니다.

    전제가 A, B 사용자가 no 1 데이터가 공란일 때 동시에 조회를 한 후

    순차적으로 저장을 했을 때

    마지막에 저장을 한 데이터만 저장이 되는 경우에 대한 처리 방법에 대한 문의였습니다.


    서버 입장에서 공란의 의미가 삭제인지, 미입력인지 판단하는 방법이 있나 궁금합니다. 
  • 더미
    18k
    2021-03-15 14:42:46

    원본값과 입력값을 비교해서 판단하는 로직이 필요합니다

  • hodoyo
    448
    2021-03-15 14:46:57

    더미 //

    답변감사드립니다. 보통 개발할때 이러한경우도 다 로직 처리를 하게 될까요?

    제가 개발하면서 이런 문제가 있을것같다는 생각이 들어 작성한 글이라.

    다른 개발자분들도 보통 이런것들도 기본적으로 처리하는지 궁금하네요..

    처리는 프론트 단에서 칼럼별로 수정 될때마다 상태를 저장해서 서버로 넘겨야 하는 방식을

    해야할것같습니다.

    칼럼별 상태가 없으면 수정안된것으로 판단하면 될것같기도 하구요 

  • C#린이
    3k
    2021-03-15 14:58:28

    hodoyo //

    고객이나 화면기획자가 요구하는 방식이 그러하다면 로직처리 해야겠지요.

  • peter_lim
    1k
    2021-03-15 15:07:44 작성 2021-03-15 15:19:06 수정됨

    A는 1,2 를 저장했고

    B는 3,4 를 저장했는데

    ---------------------------------------------------------------

    그럼 테이블에는 마지막에 저장한


    no1234
    1

    만 남게되어서 1,2칼럼이 소실되게 됩니다.


    이러한 경우 (1,2칼럼이 소실되지 않게 하기위해서는) 보통 해결책이 어떻게 되나요?

    ----------------------------------------------------------------------------------------

    왜 이질문이 갑자기 나오는거죠...?

    no이 pk라면 no(primary key)를 자동증가 설정안하신건가요?햇다면 1,2저장된 row는 no:1일거고 3,4는 no:2가 되겠죠

    안그렇게 하고싶으면 컬럼을 하나더추가해서 누가 저장했는지 where절로 따지면 될거같은데요

    INSERT INTO A VALUES(....usr_name='A') WHERE no =1;

    1,2,3,4를 다 저장하고싶으시면(A가저장했는지 B가저장했는지 관여를떠나서 하자면)

    INSERT INTO A VALUES( 1='A가고른값',2='A가고른값',3='A가고른값',4='A가고른값') WHERE no=1;

    UPDATE A SET 1='B가고른값',2='B가고른값',3='B가고른값',4='B가고른값' WHERE no=1;

    이야기흐름대로라면 A는 1,2만 저장할테니 새로운행을 저장할테고

    다음으로 B가 선택한 3,4도 저장해야하니 UPDATE쿼리를 실행하면 둘다 저장되겠네요(물론 값이 겹치면 덮어씌워짐)

    그리고

    전제가 A, B 사용자가 no 1 데이터가 공란일 때 동시에 조회를 한 후<<====이 말씀도 사실 이상한게

    no=1의 행이 데이터가 공란일때 어떠한 기준이 없어요 no가1인값을 가진행의 다른 컬럼들이 공란인것들을 하나씩 다따져보거나 다른 조건이 필요하지않을까요

    select * from A where no=1; 이렇게 row를 가져와서(no1만두고 따지실거면)

    1==null 또는 1=='' 이면 어떻게처리할건지 순차적으로 해야될거같은데요,,

    왜 1,2,3,4를 다 저장해야되는지 부터 생각해보셔야될것같아요

  • 장독깨기
    6k
    2021-03-15 15:26:17

    전제가 A, B 사용자가 no 1 데이터가 공란일 때 동시에 조회를 한 후

    순차적으로 저장을 했을 때

    마지막에 저장을 한 데이터만 저장이 되는 경우에 대한 처리 방법에 대한 문의였습니다.

    =>

    자연스럽게 마지막 저장한 데이터가 DB 저장됩니다.


    답변감사드립니다. 보통 개발할때 이러한경우도 다 로직 처리를 하게 될까요?

    제가 개발하면서 이런 문제가 있을것같다는 생각이 들어 작성한 글이라.

    다른 개발자분들도 보통 이런것들도 기본적으로 처리하는지 궁금하네요..

    처리는 프론트 단에서 칼럼별로 수정 될때마다 상태를 저장해서 서버로 넘겨야 하는 방식을

    해야할것같습니다.

    칼럼별 상태가 없으면 수정안된것으로 판단하면 될것같기도 하구요 

    => 이런식으로 업무처리 하지 않습니다.


  • 더미
    18k
    2021-03-15 15:40:58
    일반적으로 화면처리해서 넘기게 됩니다
  • 로그인을 하시면 답변을 등록할 수 있습니다.