MySQL에서 행을 삽입하는 동시에 그 내용을 바로 가져오려면 저장 프로시저(Stored Procedure)를 활용하는 것이 가장 효과적입니다. 먼저 데이터를 저장할 테이블을 생성한 후, 행을 삽입하고 결과를 사용자에게 반환하는 저장 프로시저를 만들어야 합니다.
1단계: 테이블 생성하기
먼저 예제에 사용할 테이블을 생성합니다. 아래 쿼리를 실행하면 자동 증가(AUTO_INCREMENT) 기본키와 이름 컬럼을 가진 테이블이 만들어집니다.
mysql> create table InsertRecord_SelectTable -> ( -> Id int NOT NULL AUTO_INCREMENT, -> Name varchar(20), -> PRIMARY KEY(Id) -> ); Query OK, 0 rows affected (1.45 sec)
2단계: 저장 프로시저 생성하기
이제 위 테이블에 레코드를 삽입한 직후, 해당 레코드를 즉시 조회하여 반환하는 저장 프로시저를 생성합니다. 핵심은 last_insert_id() 함수를 사용해 방금 삽입된 행의 ID를 얻어내는 것입니다.
mysql> DELIMITER // mysql> create procedure Insert_select -> ( -> In tempName varchar(40) -> ) -> begin -> declare tempId int unsigned; -> insert into InsertRecord_SelectTable(Name) values (tempName); -> set tempId = last_insert_id(); -> select *from InsertRecord_SelectTable where Id= tempId; -> END // Query OK, 0 rows affected (0.21 sec) mysql> DELIMITER ;
여기서 DELIMITER // 구문은 프로시저 본문의 세미콜론(;)이 MySQL 기본 구분자로 해석되지 않도록 임시로 구분자를 변경하는 역할을 하며, 프로시저 생성이 끝나면 반드시 원래대로 되돌려야 합니다.
3단계: 저장 프로시저 호출하기
생성된 프로시저는 다음 형식으로 호출할 수 있습니다.
CALL yourStoredProcedureName;
실제로 'John'이라는 이름을 인자로 전달하여 프로시저를 호출해 보겠습니다.
mysql> call Insert_select('John');실행 결과 확인
프로시저가 정상적으로 실행되면 삽입된 행이 즉시 화면에 출력됩니다.
+----+------+ | Id | Name | +----+------+ | 1 | John | +----+------+ 1 row in set (0.12 sec) Query OK, 0 rows affected, 1 warning (0.13 sec)
이처럼 저장 프로시저 안에서 INSERT와 SELECT를 함께 처리하면, 애플리케이션 코드에서 별도의 조회 쿼리를 실행하지 않고도 삽입된 데이터를 한 번의 호출로 확인할 수 있습니다. 이 방식은 네트워크 왕복을 줄이고 작업의 원자성을 보장한다는 장점이 있습니다.