Loading...
MySQL 9.5 Reference Manual 9.5의 11.6 Query Attributes의 한국어 번역본입니다.
아래의 경우에 피드백에서 신고해주신다면 반영하겠습니다.
감사합니다 :)
SQL statement에서 가장 눈에 잘 띄는 부분은 statement의 텍스트입니다. Client는 server에 실행을 위해 전송되는 다음 statement에 적용되는 query attribute를 정의할 수도 있습니다:
Attribute는 statement를 전송하기 전에 정의됩니다.
Attribute는 statement 실행이 끝날 때까지 존재하며, 그 시점에 attribute 집합이 초기화됩니다.
Attribute가 존재하는 동안에는 server side에서 접근할 수 있습니다.
Query attribute가 사용될 수 있는 방식의 예는 다음과 같습니다:
Web application이 데이터베이스 query를 생성하는 page를 만들어 내며, 각 query에 대해 그것을 생성한 page의 URL을 추적해야 하는 경우.
Application이 각 query와 함께 audit plugin이나 query rewrite plugin 같은 plugin에서 사용할 추가 처리 정보를 전달하는 경우.
MySQL은 query 문자열에 포함된 특별한 형식의 comment와 같은 우회 방법을 사용하지 않고도 이러한 기능을 지원합니다. 이 절의 나머지 부분에서는 필요한 선행 조건을 포함하여 query attribute 지원을 사용하는 방법을 설명합니다.
MySQL C API를 사용하는 application은 mysql_bind_param() 함수를 호출하여 query attribute를 정의합니다. mysql_bind_param()을 참조하십시오. 다른 MySQL connector도 query attribute 지원을 제공할 수 있습니다. 개별 connector에 대한 documentation을 참조하십시오.
mysql client에는 attribute 이름과 값의 pair를 최대 32개까지 정의할 수 있게 해 주는 query_attributes command가 있습니다. Section 6.5.1.2, “mysql Client Commands”를 참조하십시오.
Query attribute 이름은 character_set_client system variable이 나타내는 character set을 사용하여 전송됩니다.
Attribute가 정의된 SQL statement 내에서 query attribute에 접근하려면, Prerequisites for Using Query Attributes에 설명된 대로 query_attributes component를 설치해야 합니다. 이 component는 attribute 이름 argument를 받아 attribute 값을 string으로 반환하고, attribute가 존재하지 않으면 NULL을 반환하는 mysql_query_attribute_string() 로더블 함수(loadable function)를 구현합니다. Query Attribute Loadable Functions를 참조하십시오.
다음 예제들은 mysql client의 query_attributes command를 사용해 attribute 이름/값 pair를 정의하고, mysql_query_attribute_string() function을 사용하여 이름으로 attribute 값을 조회합니다.
이 예제는 n1과 n2라는 두 개의 attribute를 정의합니다. 첫 번째 SELECT는 이러한 attribute를 조회하는 방법을 보여 주며, 존재하지 않는 attribute(n3)를 조회하면 NULL이 반환됨을 같이 보여 줍니다. 두 번째 SELECT는 attribute가 statement 간에 유지되지 않는다는 것을 보여 줍니다.
1mysql> query_attributes n1 v1 n2 v2; 2mysql> SELECT 3 mysql_query_attribute_string('n1') AS 'attr 1', 4 mysql_query_attribute_string('n2') AS 'attr 2', 5 mysql_query_attribute_string('n3') AS 'attr 3'; 6+--------+--------+--------+ 7| attr 1 | attr 2 | attr 3 | 8+--------+--------+--------+ 9| v1 | v2 | NULL | 10+--------+--------+--------+ 11 12mysql> SELECT 13 mysql_query_attribute_string('n1') AS 'attr 1', 14 mysql_query_attribute_string('n2') AS 'attr 2'; 15+--------+--------+ 16| attr 1 | attr 2 | 17+--------+--------+ 18| NULL | NULL | 19+--------+--------+
두 번째 SELECT statement에서 보인 것처럼, 특정 statement 전에 정의된 attribute는 그 statement에만 사용 가능하며, statement가 실행된 후에는 초기화됩니다. 여러 statement에 걸쳐 attribute 값을 사용하려면, 그 값을 변수에 할당하십시오. 다음 예제는 이를 수행하는 방법을 보여 주며, attribute 값이 변수를 통해 이후 statement에서 사용 가능하지만, mysql_query_attribute_string()을 호출하는 방식으로는 사용할 수 없음을 설명합니다:
1mysql> query_attributes n1 v1 n2 v2; 2mysql> SET 3 @attr1 = mysql_query_attribute_string('n1'), 4 @attr2 = mysql_query_attribute_string('n2'); 5 6mysql> SELECT 7 @attr1, mysql_query_attribute_string('n1') AS 'attr 1', 8 @attr2, mysql_query_attribute_string('n2') AS 'attr 2'; 9+--------+--------+--------+--------+ 10| @attr1 | attr 1 | @attr2 | attr 2 | 11+--------+--------+--------+--------+ 12| v1 | NULL | v2 | NULL | 13+--------+--------+--------+--------+
Attribute는 table에 저장하여 나중에 사용할 수 있도록 보관할 수도 있습니다:
1mysql> CREATE TABLE t1 (c1 CHAR(20), c2 CHAR(20)); 2 3mysql> query_attributes n1 v1 n2 v2; 4mysql> INSERT INTO t1 (c1, c2) VALUES( 5 mysql_query_attribute_string('n1'), 6 mysql_query_attribute_string('n2') 7 ); 8 9mysql> SELECT * FROM t1; 10+------+------+ 11| c1 | c2 | 12+------+------+ 13| v1 | v2 | 14+------+------+
Query attribute에는 다음과 같은 제한과 제약이 있습니다:
Server로 statement를 실행하도록 전송하기 전에 여러 번 attribute 정의 작업이 발생하는 경우, 가장 최근의 정의 작업이 적용되며 이전 작업에서 정의된 attribute는 대체됩니다.
동일한 이름으로 여러 attribute가 정의된 경우, attribute 값을 조회하려는 시도의 결과는 정의되지 않습니다.
빈 이름으로 정의된 attribute는 이름으로 조회할 수 없습니다.
PREPARE로 준비된 statement에서는 attribute를 사용할 수 없습니다.
mysql_query_attribute_string() function은 DDL statement에서 사용할 수 없습니다.
Attribute는 복제되지 않습니다. mysql_query_attribute_string() function을 호출하는 statement는 모든 server에서 동일한 값을 얻지 못합니다.
Attribute가 정의된 SQL statement 내에서 query attribute에 접근하려면, query_attributes component가 설치되어 있어야 합니다. 다음 statement를 사용하여 설치합니다:
1INSTALL COMPONENT "file://component_query_attributes";
Component 설치는 한 번만 수행하면 되며, server를 시작할 때마다 수행할 필요는 없습니다. INSTALL COMPONENT는 component를 로드하고, 이후 server 시작 시 로드되도록 mysql.component system table에 이를 등록합니다.
query_attributes component는 mysql_query_attribute_string() function을 구현하기 위해 query attribute에 접근합니다. Section 7.5.4, “Query Attribute Components”를 참조하십시오.
query_attributes component를 uninstall하려면, 다음 statement를 사용하십시오:
1UNINSTALL COMPONENT "file://component_query_attributes";
UNINSTALL COMPONENT는 component를 언로드(unload)하고, 이후 server 시작 시 로드되지 않도록 mysql.component system table에서 등록을 해제합니다.
query_attributes component를 설치하고 uninstall하는 작업은, 그 component가 구현하는 mysql_query_attribute_string() function의 설치와 제거를 동시에 수행하므로, 이를 위해 CREATE FUNCTION이나 DROP FUNCTION을 사용할 필요는 없습니다.
Application은 server에 전송되는 다음 query에 적용되는 attribute를 정의할 수 있습니다. mysql_query_attribute_string() function은 attribute 이름을 받아 attribute 값을 string으로 반환합니다. 이 function은 query가 자신에게 적용되는 attribute의 값을 조회하고 이를 포함시킬 수 있게 해 줍니다.
mysql_query_attribute_string()은 query_attributes component를 설치하면 함께 설치됩니다. Query attribute의 목적과 사용법에 대해서는 Section 11.6, “Query Attributes”을 참조하십시오.
Arguments:
name: Attribute 이름.Return value:
성공 시 attribute 값을 string으로 반환하고, attribute가 존재하지 않으면 NULL을 반환합니다.
Example:
다음 예제는 mysql client의 query_attributes command를 사용해 mysql_query_attribute_string()으로 조회할 수 있는 query attribute를 정의합니다. SELECT는 존재하지 않는 attribute(n3)를 조회하면 NULL이 반환됨을 보여 줍니다.
1mysql> query_attributes n1 v1 n2 v2; 2mysql> SELECT 3 -> mysql_query_attribute_string('n1') AS 'attr 1', 4 -> mysql_query_attribute_string('n2') AS 'attr 2', 5 -> mysql_query_attribute_string('n3') AS 'attr 3'; 6+--------+--------+--------+ 7| attr 1 | attr 2 | attr 3 | 8+--------+--------+--------+ 9| v1 | v2 | NULL | 10+--------+--------+--------+
11.5 Expressions
11.7 Comments