Computer >> 컴퓨터 >  >> 프로그래밍 >> MySQL

MySQL 저장 프로시저로 테이블 데이터 삭제하는 방법 완벽 가이드

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 절)이 정확한지 반드시 검증한 후 실행하는 것이 안전합니다.