dyway

I'm very well : Life of an ordinary programmer

간단한 UPDATE 쿼리 문제

다음과 같은 UPDATE 쿼리가 있을 때 오류가 나는 것은? 또, 실행되는 것이라면 실행 결과는?

  1. UPDATE  db.table t SET t.col1 = ‘A’, t.col2 = ‘B’ WHERE t.id = 1;
  2. UPDATE  db.table t SET t.col1 = ‘A’, t.col2 = ‘B’, t.col3 = ‘C’ WHERE t.id = 1;
  3. UPDATE  db.table t SET t.col1 = ‘A’, t.col2 = ‘B’ AND t.col3 = ‘C’ WHERE t.id = 1;
  4. UPDATE  db.table t SET t.col1 = ‘A’ AND t.col2 = ‘B’, t.col3 = ‘C’ WHERE t.id = 1;
  5. UPDATE  db.table t SET t.col1 = ‘A’ AND t.col2, t.col3 = ‘C’ WHERE t.id = 1;

정답은 모두 오류 없이 실행이 된다.
SET 절에 쓴 ‘AND’ 구문 때문에 3, 4, 5번이 오류가 날 거 같은 느낌이지만, 실제로는 모두 실행이 된다. AND 구문이 AND 연산을 통한 값을 SET 해준다고 생각하면 간단한 문제이다. WHERE 절에 AND 구문이 들어가는 게 맞지, SET 절에 들어가는 건 이상하다고 느끼는 것은 그렇게 많이 사용해오지 않아서 인듯 하다.

  1. col1 = ‘A’, col2 = ‘B’로 업데이트
  2. col1 = ‘A’, col2 = ‘B’, col3 = ‘C’로 업데이트
  3. col1 = ‘A’, col2 = (‘B’ AND (col3 = ‘C’))로 업데이트
  4. col1 = (‘A’ AND (col2 = ‘B’)), col3 = ‘C’로 업데이트
  5. col1 = (‘A’ AND col2), col3 = ‘C’로 업데이트

최근에 DB팀에 단순 UPDATE 쿼리 실행 요청을 하고 퇴근을 했는데, 지하철에서 메일을 보다가 내가 등록한 이슈가 처리되었다는 결과를 본 후 VPN으로 백오피스에 들어와서 확인했더니 원하는 값이 아닌 0으로 업데이트가 되어 있더라. 화들짝 놀라 사무실에 있던 동료에게 내가 올렸던 이슈 번호를 알려주었더니 SET 절에 AND 구문이 있는데 이게 희한하게 실행이 된다고 했다. 아무튼 올바른 값으로 다시 UPDATE 요청을 한 후에 그 이슈는 마무리 지었고, 다음 날 출근하자마자 이것 저것 실행을 해 보니 정말 아무 문제 없이 모두 실행이 되더라.

그리고 스프린트 회고 때, 팀 동료들에게 위 퀴즈를 냈더니 우리 팀의 에이스 중 한 분인 B님이 대번에 AND 연산한 값이 들어가는 거 같다는 정답을 대번에 알아 맞추었다. 궁금하신 분들은 한 번 해보셔도 좋을 듯.

광고

Written by dyway

2014년 11월 11일 , 시간: 1:03 오후

내 경험, 프로그래밍에 게시됨

Tagged with , , ,

%d 블로거가 이것을 좋아합니다: