2009년 1월 15일 목요일

검색용 SQL문실행시의 패킷1

여기에서는 다음과같은 SELECT문을 실행했을 경우에 주고받는 패킷을 알아보자.

*SELECT문의 실행예
mysql>SELECT * FROM tbl1 where col1 <= 3 AND col2= 'abc';
+-----------------------------+
col1   | col2  | col3
1        | abc | 2008-01-15 20:00:01
2        | abc   | 2008-01-17 20:00:02
+-----------------------------+
2 rows in set( 0.00 sec)

클라이언트에서 서버에 보내지는 Command Packet에 대해서는 기본적으로 INSERT문하고 비숫하다.

Command Packet(SELECT문)
패킷헤더 :4바이트
명렁어번호: 1바이트, 보통 SQL문이면 0x03(COM_QUERY)
 SQL문본체: n바이트,  SQL문 본체. 0x00으로 끝나지 않음. 

 
서버에서 클라이언트에 대해서는 결과셋이 반환되기 때문에 단순히 OK/Error Packet이 되지는 않는다. 다음과 같은 구성으로 반환된다. 

ResultSet Header Packet  1패킷
Field Packets  컬럼수 분의 패킷
EOF Packet  1패킷
Row Data Packets 레코드수 분의 패킷
EOF Packet 1패킷