2009년 1월 14일 수요일

갱신용 SQL문 실행시의 패킷2

OK/Error Packet
서버에서 클라이언트에 되돌려 보내지는 패킷은 인증시와 마찬가지로 OK Packet또는 Error Packet이 된다. OK Packet은 다음과 같다. 

OK Packet(INSERT문 실행시)
  패킷헤더 : 4바이트 
  필드수: 1바이트     , 0x00으로 고정(SELECT문같은 결과셋을 반환하는 것이 아니니까)
  affected rows: 1-9바이트, 처리된 레코드수 Length Coded Binary표기
  insert_id: 1-9바이트, 세션변수insert_id의 값. Length Coded Binary표기
  server status: 2바이트
  warning count: 2바이트 

affected rows하고 insert_id는 Length Coded Binary라는 표기로 되어있다. 
이것은 선두 1~9바이트로 수치를 표현하는 방법이다. Length Coded String하고 비슷하지만 뒤에 문자열이 계속되지 않는 다는 것이 다른 점이라 할 수 있다. 
 1행이 갱신(INSERT)되었을 경우에는 affected rows는 0x01 00이 된다. 

앞에서 이야기 한적이 있지만 real endian표기가 됨으로 0x00 01이 되지는 않는다.  
또 AUTO_INCREMENT속성이 없는 데이블에 대한 갱신인 경우에는 insert_id에는 영향이 없다.