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

MySQL 사용자 변수와 프리페어드 스테이트먼트(Prepared Statement)의 공통점

세션 범위에서만 존재한다는 공통점

MySQL 사용자 변수는 해당 변수가 사용되는 클라이언트 연결(connection)에 종속되며, 그 연결이 유지되는 동안에만 존재합니다. 따라서 연결이 종료되면 해당 연결에서 생성된 모든 사용자 변수도 함께 사라집니다.

프리페어드 스테이트먼트도 이와 매우 유사한 방식으로 동작합니다. 프리페어드 스테이트먼트 역시 생성된 세션(session)이 유지되는 동안에만 존재하며, 해당 세션 안에서만 참조할 수 있습니다. 세션이 종료되면 그 세션에서 생성된 모든 프리페어드 스테이트먼트는 자동으로 삭제됩니다.

대소문자를 구분하지 않는다

또 하나의 공통점은 MySQL 사용자 변수와 마찬가지로 프리페어드 스테이트먼트도 대소문자를 구분하지 않는다는 점입니다. 즉, stmt11STMT11은 동일한 문장으로 취급됩니다. 아래 예시를 통해 직접 확인해 보겠습니다.

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

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

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

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

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

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

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

위 예제에서는 처음에 stmt11을 실행하고, 이후에는 STMT11을 실행했습니다. 표기 방식이 달랐음에도 두 문장 모두 정상적으로 동작한 것을 확인할 수 있습니다. 이는 프리페어드 스테이트먼트가 대소문자를 구분하지 않기 때문입니다.

정리

결론적으로 MySQL 사용자 변수와 프리페어드 스테이트먼트는 다음 두 가지 중요한 특징을 공유합니다.

  • 세션 범위: 둘 다 생성된 연결 또는 세션이 종료되면 함께 소멸합니다.
  • 대소문자 무관: 이름을 대문자 또는 소문자로 작성해도 동일하게 인식됩니다.