MySQL에서는 저장 프로시저(Stored Procedure)를 활용해 DELETE 쿼리를 실행할 수 있으며, 매개변수(Parameter)를 통해 값을 전달하는 방식으로 유연하게 삭제 작업을 처리할 수 있습니다. 이번 글에서는 실제 예제를 통해 저장 프로시저로 DELETE 쿼리를 구현하는 전체 과정을 단계별로 살펴보겠습니다.
1. 테이블 생성하기
먼저 예제에 사용할 테이블을 생성합니다.
mysql> create table DemoTable1464
-> (
-> Id int,
-> FirstName varchar(20)
-> );
Query OK, 0 rows affected (0.51 sec)
2. 샘플 데이터 삽입하기
INSERT 명령어를 사용해 테이블에 레코드를 추가합니다.
mysql> insert into DemoTable1464 values(101,'Chris Brown'); Query OK, 1 row affected (0.11 sec) mysql> insert into DemoTable1464 values(102,'John Doe'); Query OK, 1 row affected (0.09 sec)
3. 현재 데이터 확인하기
SELECT 문을 사용해 테이블의 모든 레코드를 조회합니다.
mysql> select * from DemoTable1464;
실행 결과는 다음과 같습니다.
+------+-------------+ | Id | FirstName | +------+-------------+ | 101 | Chris Brown | | 102 | John Doe | +------+-------------+ 2 rows in set (0.00 sec)
4. DELETE 쿼리가 포함된 저장 프로시저 생성하기
이제 DELETE 쿼리를 수행하는 저장 프로시저를 만들어 보겠습니다. 프로시저는 Id와 FirstName 두 개의 입력 매개변수(IN)를 받아, 두 조건이 모두 일치하는 레코드만 삭제하도록 구성했습니다.
mysql> DELIMITER //
mysql> CREATE PROCEDURE delete_demo(IN local_Id int, IN local_Name varchar(20))
-> BEGIN
-> delete from DemoTable1464
-> where Id=local_Id and
-> FirstName=local_Name;
-> END //
Query OK, 0 rows affected (0.24 sec)
mysql> DELIMITER ;
참고: 저장 프로시저 본문 내부의 세미콜론(;)과 문장 종료를 구분하기 위해 DELIMITER //로 구분 기호를 임시 변경한 뒤, 프로시저 생성이 끝나면 원래대로 DELIMITER ;로 되돌려야 합니다.
5. 저장 프로시저 호출하기
생성된 프로시저는 CALL 명령어로 호출할 수 있습니다. 여기서는 Id가 102이고 이름이 'John Doe'인 레코드를 삭제해 보겠습니다.
mysql> call delete_demo(102,'John Doe'); Query OK, 1 row affected, 1 warning (0.11 sec)
6. 삭제 결과 확인하기
프로시저 실행 후 테이블을 다시 조회하여 레코드가 정상적으로 삭제되었는지 확인합니다.
mysql> select * from DemoTable1464;
실행 결과는 다음과 같습니다.
+------+-------------+ | Id | FirstName | +------+-------------+ | 101 | Chris Brown | +------+-------------+ 1 row in set (0.00 sec)
위 과정처럼 저장 프로시저에 매개변수를 전달하면, 조건에 맞는 특정 레코드만 안전하고 반복 가능한 방식으로 삭제할 수 있습니다. 애플리케이션 코드에서 삭제 로직을 직접 작성하는 대신 저장 프로시저를 활용하면 SQL 로직을 중앙에서 관리할 수 있어 유지보수에도 큰 도움이 됩니다.