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

MySQL 프리페어드 스테이트먼트(Prepared Statement)로 테이블 업데이트하는 방법

프리페어드 스테이트먼트란?

MySQL에서 프리페어드 스테이트먼트(Prepared Statement)는 SQL 쿼리를 미리 컴파일해 두고, 실행 시점에 필요한 값만 파라미터로 전달하여 사용할 수 있게 해주는 기능입니다. 이를 활용하면 동일한 쿼리를 반복 실행할 때 성능이 향상되고, SQL 인젝션 공격에 대한 보안성도 높아집니다.

다음 예제를 통해 프리페어드 스테이트먼트를 사용하여 테이블을 업데이트하는 과정을 쉽게 이해할 수 있습니다. 여기서는 'Student'라는 테이블의 데이터를 수정해 보겠습니다.

1단계: 기존 데이터 확인

먼저 현재 'Student' 테이블에 저장된 데이터를 조회합니다.

mysql> Select * from Student;
+------+-------+
| Id   | Name  |
+------+-------+
| 1    | Ram   |
| 2    | Shyam |
| 3    | Mohan |
+------+-------+
3 rows in set (0.00 sec)

2단계: PREPARE 문으로 쿼리 준비하기

PREPARE 문을 사용하면 UPDATE 쿼리를 미리 준비해 둘 수 있습니다. 이때 나중에 값을 전달받을 부분은 물음표(?) 플레이스홀더로 표시합니다.

mysql> PREPARE stmt11 FROM 'UPDATE Student SET Name = ? WHERE Id = ?';
Query OK, 0 rows affected (0.03 sec)
Statement prepared

위 쿼리에서 첫 번째 '?'는 변경할 이름(Name) 값, 두 번째 '?'는 조건이 될 아이디(Id) 값을 의미합니다.

3단계: SET 문으로 변수 값 지정하기

플레이스홀더에 전달할 실제 값을 사용자 정의 변수(@A, @B)에 저장합니다.

mysql> SET @A = 'Sohan', @B = 3;
Query OK, 0 rows affected (0.00 sec)

여기서는 Id가 3인 학생의 이름을 'Sohan'으로 변경하도록 설정했습니다.

4단계: EXECUTE 문으로 쿼리 실행하기

EXECUTE 문과 USING 절을 함께 사용하여, 앞서 지정한 변수 값을 프리페어드 스테이트먼트에 전달하고 쿼리를 실행합니다.

mysql> EXECUTE Stmt11 USING @A, @B;
Query OK, 1 row affected (0.05 sec)

5단계: 결과 확인

업데이트가 정상적으로 적용되었는지 다시 데이터를 조회해 확인합니다.

mysql> Select * from student;
+------+-------+
| Id   | Name  |
+------+-------+
| 1    | Ram   |
| 2    | Shyam |
| 3    | Sohan |
+------+-------+
3 rows in set (0.00 sec)

결과를 보면 Id가 3인 학생의 이름이 'Mohan'에서 'Sohan'으로 성공적으로 변경된 것을 확인할 수 있습니다.

정리

프리페어드 스테이트먼트로 테이블을 업데이트하는 절차는 다음 세 단계로 요약됩니다.

  • PREPARE: 플레이스홀더(?)가 포함된 UPDATE 쿼리를 미리 준비합니다.
  • SET: 플레이스홀더에 전달할 값을 사용자 정의 변수에 저장합니다.
  • EXECUTE ... USING: 변수 값을 전달하며 준비된 쿼리를 실행합니다.

이러한 방식은 쿼리 구조를 재사용하면서 값만 바꿔가며 실행할 수 있어, 반복적인 데이터 갱신 작업에서 특히 유용합니다.