MySQL에서는 접속할 때라든지 SQL문실행을 할 때의 갖은 처리에 있어서 클라이언트⇔서버 사이에 MySQL독자의 규칙에 따른 패킷송수신을 한다.
전제조건에 대해서
패킷의 내부라는 것을 보통 MySQL을 사용함에 있어서 의식하는 것은 거의 없다.
그러나 기술적으로 흥미가 있는 사람은 적지 않을 것이다.
또 PHP나 PERL등 각종 프로그래밍언어 전용의 컨넥터(DB접속용 드라이버 프로그램)를 개량하고 싶다라고 할 때에는 프로토콜에 대한 이해가 최소한 필요하다.
MySQL의 C API를 사용하지 않고 드라이버를 만들 때에는 클라이언트측에서 통신내용을 직접 핸들링할 필요가 있기 때문이다.
여기에서는 다음과 같은 처리를 할 때 , 어떤 패킷이 송수신되는 것인지 소개해보겠다.
1. 로그인할 때
2. 보통 갱신계열의 SELECT문을 실행할 때
3. 보통 검색계열의 SQL문을 실행할 때
4. Prepared Satement을 실행할 때
5. 서버사이드 커서를 이용할 때
예로써 다음과 같은 테이블, 레코드를 test데이터베이스에 만들어 놓았다는 것을 전제로 설명해보겠다.
*전제가 되는 테이블과 레코드예
CREATE TABLE tb11 ( col1 INTEGER PRIMARY KEY, col2 VARCHAR(10), col3 DATETIME);
INSERT INTO tb11 VALUES(1, 'abc', NOW() );
INSERT INTO tb11 VALUES(2, 'def', NOW() );
INSERT INTO tb11 VALUES(3, 'abc', NOW() );
INSERT INTO tb11 VALUES(4, 'xyz', NOW() );