MySQL 저장 프로시저로 특정 조건의 레코드 업데이트하기
저장 프로시저(Stored Procedure) 안에서 UPDATE 명령과 WHERE 절을 조합하면, 원하는 조건에 해당하는 레코드만 골라서 수정할 수 있습니다. 이 글에서는 테이블 생성부터 저장 프로시저 작성, 호출, 결과 확인까지 전 과정을 단계별로 살펴보겠습니다.
1단계: 테이블 생성
먼저 예제에 사용할 테이블을 만듭니다.
mysql> create table DemoTable
-> (
-> Id int,
-> FirstName varchar(20),
-> LastName varchar(20)
-> );
Query OK, 0 rows affected (0.56 sec)
2단계: 샘플 데이터 삽입
INSERT 명령으로 테이블에 레코드를 몇 개 추가합니다.
mysql> insert into DemoTable values(101,'David','Brown');
Query OK, 1 row affected (0.15 sec)
mysql> insert into DemoTable values(102,'Chris','Brown');
Query OK, 1 row affected (0.08 sec)
mysql> insert into DemoTable values(103,'John','Doe');
Query OK, 1 row affected (0.07 sec)
3단계: 현재 데이터 확인
SELECT 문으로 테이블의 전체 레코드를 조회해 봅니다.
mysql> select *from DemoTable;
실행 결과는 다음과 같습니다.
+------+-----------+----------+
| Id | FirstName | LastName |
+------+-----------+----------+
| 101 | David | Brown |
| 102 | Chris | Brown |
| 103 | John | Doe |
+------+-----------+----------+
3 rows in set (0.00 sec)
4단계: 저장 프로시저 생성
이제 Id가 101인 레코드의 이름과 성을 매개변수로 전달받아 업데이트하는 저장 프로시저를 만들어 보겠습니다.
mysql> delimiter //
mysql> create procedure update_sp(fName varchar(20),lName varchar(20))
-> begin
-> update DemoTable
-> set FirstName=fName,
-> LastName=lName
-> where Id=101;
-> end
-> //
Query OK, 0 rows affected (0.12 sec)
mysql> delimiter ;
참고: DELIMITER 명령은 세미콜론(;) 대신 //를 구분자로 임시 변경하여, 프로시저 본문 내부의 세미콜론이 MySQL 클라이언트에 의해 잘못 해석되지 않도록 합니다. 프로시저 생성이 끝나면 반드시 원래 구분자(;)로 되돌려야 합니다.
5단계: 저장 프로시저 호출
CALL 명령으로 저장 프로시저를 실행합니다. 첫 번째 인자는 이름(FirstName), 두 번째 인자는 성(LastName)입니다.
mysql> call update_sp('Adam','Smith');
Query OK, 1 row affected, 2 warnings (0.08 sec)6단계: 업데이트 결과 확인
다시 한번 테이블을 조회하면 Id가 101인 레코드만 'Adam Smith'로 변경된 것을 확인할 수 있습니다.
mysql> select *from DemoTable;
실행 결과는 다음과 같습니다.
+------+-----------+----------+
| Id | FirstName | LastName |
+------+-----------+----------+
| 101 | Adam | Smith |
| 102 | Chris | Brown |
| 103 | John | Doe |
+------+-----------+----------+
3 rows in set (0.00 sec)
정리
이처럼 저장 프로시저 내부에서 UPDATE 문과 WHERE 절을 함께 사용하면, 조건에 맞는 특정 레코드만 안전하고 반복 가능한 방식으로 업데이트할 수 있습니다. 매개변수를 활용하면 호출 시점마다 다른 값을 유연하게 전달할 수 있다는 점도 큰 장점입니다.