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

MySQL 저장 프로시저를 활용한 테이블 값 업데이트 방법

MySQL에서는 IN 매개변수를 사용하는 저장 프로시저(Stored Procedure)를 생성하여 테이블의 값을 손쉽게 업데이트할 수 있습니다. 이해를 돕기 위해 다음과 같은 데이터를 가진 student_info 테이블을 예시로 들어보겠습니다.

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)

저장 프로시저 생성하기

이제 Update_studentinfo라는 이름의 저장 프로시저를 아래와 같이 생성하면, student_info 테이블의 값을 업데이트할 수 있습니다. 프로시저는 학생 ID(p_id)와 새 주소(p_address) 두 개의 IN 매개변수를 받도록 작성했습니다.

mysql> DELIMITER // ;
mysql> Create Procedure Update_studentinfo ( IN p_id INT, IN p_address varchar(20))
    -> BEGIN
    -> UPDATE student_info
    -> SET
    -> address = p_address WHERE id = p_id;
    -> END //
Query OK, 0 rows affected (0.13 sec)

코드 설명

  • DELIMITER // : 프로시저 내부의 세미콜론(;)이 SQL 종료 문자로 해석되지 않도록 구분 기호를 변경합니다.
  • IN 매개변수 : 프로시저 호출 시 외부에서 값을 전달받아 쿼리에 사용합니다.
  • UPDATE 문 : 전달받은 p_id에 해당하는 레코드의 address 값을 p_address로 변경합니다.

프로시저 호출 및 결과 확인

프로시저 생성이 완료되면 구분 기호를 원래대로 되돌린 후, 업데이트하고자 하는 값을 인자로 전달하여 프로시저를 호출합니다.

mysql> Delimiter ; //
mysql> CALL Update_studentinfo(125, 'Shimla');
Query OK, 1 row affected (0.14 sec)

mysql> Select * from student_info;
+------+---------+------------+------------+
| id   | Name    | Address    | Subject    |
+------+---------+------------+------------+
| 101  | YashPal | Amritsar   | History    |
| 105  | Gaurav  | Jaipur     | Literature |
| 110  | Rahul   | Chandigarh | History    |
| 125  | Raman   | Shimla     | Computers  |
+------+---------+------------+------------+
4 rows in set (0.00 sec)

위 실행 결과를 보면, id = 125인 레코드의 주소가 'Bangalore'에서 'Shimla'로 성공적으로 변경된 것을 확인할 수 있습니다. 이처럼 저장 프로시저를 활용하면 반복적인 UPDATE 쿼리를 매개변수만 바꿔 재사용할 수 있어 코드 관리가 훨씬 효율적입니다.