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

MySQL 저장 프로시저로 특정 조건의 레코드 업데이트하는 방법

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 절을 함께 사용하면, 조건에 맞는 특정 레코드만 안전하고 반복 가능한 방식으로 업데이트할 수 있습니다. 매개변수를 활용하면 호출 시점마다 다른 값을 유연하게 전달할 수 있다는 점도 큰 장점입니다.