MySQL에서는 IN 매개변수를 사용하는 저장 프로시저(Stored Procedure)를 생성하면, 테이블에서 원하는 값을 손쉽게 삭제할 수 있습니다. 이번 글에서는 'student_info'라는 예제 테이블을 활용해 삭제 전용 저장 프로시저를 만들고 실행하는 과정을 단계별로 살펴보겠습니다.
1. 예제 테이블 확인하기
먼저 삭제 작업에 사용할 'student_info' 테이블의 현재 데이터를 확인합니다.
mysql> Select * from student_info; +------+---------+------------+------------+ | id | Name | Address | Subject | +------+---------+------------+------------+ | 100 | Aarav | Delhi | Computers | | 101 | YashPal | Amritsar | History | | 105 | Gaurav | Jaipur | Literature | | 110 | Rahul | Chandigarh | History | +------+---------+------------+------------+ 4 rows in set (0.00 sec)
테이블에는 총 4개의 학생 레코드가 저장되어 있습니다. 여기서 특정 id를 가진 레코드를 삭제하는 프로시저를 만들어 보겠습니다.
2. 삭제용 저장 프로시저 생성하기
아래와 같이 'Delete_studentinfo'라는 이름의 저장 프로시저를 생성합니다. 이 프로시저는 IN 매개변수 p_id를 입력받아, 해당 id와 일치하는 레코드를 DELETE 문으로 제거하는 구조입니다.
mysql> DELIMITER // ;
mysql> Create Procedure Delete_studentinfo ( IN p_id INT)
-> BEGIN
-> DELETE FROM student_info
-> WHERE ID=p_id;
-> END //
Query OK, 0 rows affected (0.11 sec)
mysql> DELIMITER ; //참고: 저장 프로시저 본문 안에는 세미콜론(;)으로 끝나는 여러 SQL 문이 포함될 수 있으므로, 프로시저 생성 전에 DELIMITER //로 구분 기호를 변경하고, 생성이 끝난 후에는 반드시 DELIMITER ;로 원래 상태로 되돌려 주어야 합니다.
3. 저장 프로시저 호출하고 결과 확인하기
이제 CALL 문을 사용해 프로시저를 호출하면서, 삭제하고 싶은 레코드의 id 값(여기서는 100)을 인자로 전달합니다.
mysql> CALL Delete_studentinfo(100); Query OK, 1 row affected (1.09 sec) mysql> Select * from student_info; +------+---------+------------+------------+ | id | Name | Address | Subject | +------+---------+------------+------------+ | 101 | YashPal | Amritsar | History | | 105 | Gaurav | Jaipur | Literature | | 110 | Rahul | Chandigarh | History | | 125 | Raman | Bangalore | Computers | +------+---------+------------+------------+ 4 rows in set (0.01 sec)
위 결과 집합을 보면 id = 100인 레코드(Aarav)가 테이블에서 성공적으로 삭제된 것을 확인할 수 있습니다.
정리 및 주의사항
이처럼 IN 매개변수를 활용한 저장 프로시저를 만들어 두면, 매번 DELETE 쿼리를 직접 작성하지 않고도 간단하게 CALL 프로시저명(id값); 한 줄로 데이터를 삭제할 수 있어 코드 재사용성과 관리 편의성이 크게 향상됩니다.
다만 DELETE 작업은 되돌릴 수 없으므로, 실무 환경에서는 트랜잭션(Transaction)과 함께 사용하거나 삭제 조건(WHERE 절)이 정확한지 반드시 검증한 후 실행하는 것이 안전합니다.