Loading...
MySQL 9.5 Reference Manual 9.5의 15.1.17 CREATE JSON DUALITY VIEW Statement의 한국어 번역본입니다.
아래의 경우에 피드백에서 신고해주신다면 반영하겠습니다.
감사합니다 :)
1CREATE [OR REPLACE] 2 [ALGORITHM = {UNDEFINED | MERGE}] 3 [DEFINER = user] 4 [SQL SECURITY {DEFINER | INVOKER}] 5 JSON [RELATIONAL] DUALITY VIEW 6 [IF NOT EXISTS] [schema_name.]view_name 7 AS json_duality_select_statement 8 9json_duality_select_statement: 10 SELECT json_duality_object_expression 11 FROM [schema_name.]root_table_name [AS table_alias] 12 13json_duality_object_expression: 14 JSON_DUALITY_OBJECT(...)
이 statement는 _view_name_이라는 이름의 JSON duality view를 생성합니다. OR REPLACE를 사용하면, 동일한 이름을 가진 기존 JSON duality view가 있을 경우, 이를 동일한 이름의 새로운 JSON duality view로 대체합니다. IF NOT EXISTS를 지정하면 동일한 이름의 JSON duality view가 존재하지 않을 때에만 view 생성을 시도하며, 그렇지 않으면 에러를 반환하는 대신 생성을 수행하지 않습니다.
JSON duality view는 SQL view와 동일한 네임스페이스를 사용합니다. 이는, 기존 SQL view와 동일한 이름의 JSON duality view를 생성할 수 없음을 의미하며, 반대로 기존 JSON duality view와 동일한 이름의 SQL view 역시 생성할 수 없음을 의미합니다. 또한 CREATE OR REPLACE를 사용하여 SQL view를 JSON duality view로, 또는 JSON duality view를 SQL view로 대체하는 것은 동작하지 않습니다.
DEFINER와 SQL SECURITY는 CREATE VIEW에서와 동일하게 이 statement와 함께 동작합니다. ALGORITHM의 경우 TEMPTABLE을 사용하면 에러가 반환됩니다.
RELATIONAL 키워드는 선택 사항이며, 아무 효과도 없고, 예제들에서는 생략합니다.
view 이름과 함께 사용되는 _schema_name_은 존재하는 스키마의 이름이어야 합니다. 스키마 이름이 생략된 경우, JSON duality view는 현재 스키마에 생성됩니다. 현재 선택된 스키마가 없고, 명시된 스키마도 없는 경우에는, statement는 에러와 함께 거부됩니다. _schema_name_과 _view_name_은 MySQL 식별자 규칙을 따라야 합니다. 이러한 규칙에 대한 정보는 Section 11.2, “Schema Object Names” 및 Section 11.2.1, “Identifier Length Limits”를 참조하십시오.
WITH ... CHECK OPTION 절은 CREATE VIEW에서와 같이 CREATE JSON DUALITY VIEW에서도 동작합니다. 자세한 내용은 해당 statement에 대한 설명을 참조하십시오.
_json_duality_select_statement_는 스키마 _schema_name_의 테이블 _root_table_name_의 컬럼들을 사용하여 구성된 JSON 오브젝트 식( json_duality_object_expression)을 선택합니다. _schema_name_이 생략되면, MySQL은 이 테이블이 현재 스키마에 속한 것으로 간주합니다. 스키마가 지정되지 않고 현재 선택된 스키마도 없는 경우, statement는 에러와 함께 거부됩니다. _schema_name_과 _root_table_name_은 모두 MySQL 식별자에 대한 일반적인 규칙을 따라야 합니다.
_json_duality_select_statement_는 정확히 하나의 JSON_DUALITY_OBJECT() 식과 하나의 FROM 절만을 포함해야 합니다. 집합 연산( UNION, INTERSECT, EXCEPT)과 common table 식( WITH)은 지원되지 않습니다. FROM 절은 하나의 테이블만을 참조해야 합니다. WHERE, JOIN, GROUP BY, ORDER BY, HAVING, WINDOW, LIMIT 절은 지원되지 않습니다.
_json_duality_object_expression_은 JSON_DUALITY_OBJECT()가 반환하는 값입니다. 이 함수의 인수에 대한 정보는 해당 함수 설명을 참조하십시오.
JSON_DUALITY_OBJECT() 함수는 CREATE JSON DUALITY VIEW 또는 ALTER JSON DUALITY VIEW에서 사용할 JSON duality 오브젝트를 반환합니다. 이 외의 어떤 컨텍스트에서 이 함수를 호출하려고 하면 에러가 발생합니다.
JSON_DUALITY_OBJECT()는 하나 또는 두 개의 인수를 받습니다. 선택적인 테이블 애너테이션 식 하나와 JSON 오브젝트 형식의 키-값 쌍 집합입니다.
요구 사항:
루트 테이블의 기본 키를 나타내는 루트 오브젝트에는 _id라는 이름의 키가 반드시 포함되어야 합니다. 이 키가 없으면 에러가 발생합니다. 어떤 서브 키도 _id라는 이름을 가질 수 없습니다.
루트 테이블 및 nested_descendent_json_objects, singleton_descendent_json_object 내에서 참조되는 테이블들을 포함한 모든 참여 테이블은 베이스 테이블이어야 하며, 기본 키를 가져야 합니다.
테이블 프로젝션에는 모든 참여 테이블의 기본 키가 포함되어야 합니다.
프로젝션되는 차일드 테이블은 다음 두 가지 방식 중 하나로 페어런트 테이블과 관계를 가질 수 있습니다:
PK - FK 관계: 차일드 테이블이 _singleton_descendent_json_object_로 프로젝션되는 경우, WHERE 절은 child_table.PK = parent_table.FK 형식을 강제해야 합니다. 차일드 테이블이 _nested_descendent_json_objects_로 프로젝션되는 경우, WHERE 절은 child_table.FK = parent_table.PK 형식을 강제해야 합니다.
PK - Any Column 관계: 차일드 테이블이 _singleton_descendent_json_object_로 프로젝션되는 경우, WHERE 절은 child_table.PK = parent_table.any_column 형식을 강제해야 합니다. 차일드 테이블이 _nested_descendent_json_objects_로 프로젝션되는 경우, WHERE 절은 child_table.any_column = parent_table.PK 형식을 강제해야 합니다.
이 함수의 인수에 대한 전체 문법은 다음과 같으며, 추가 설명이 뒤따릅니다:
1table_annotations: 2 WITH (table_annotation[, table_annotation]...) 3 4table_annotation: 5 INSERT | UPDATE | DELETE 6 7json_duality_key_value_pairs: 8 json_duality_key_value_pair[, json_duality_key_value_pair]... 9 10json_duality_key_value_pair: 11 key_name:value_expression 12 13value_expression: 14 column_name 15 | (singleton_descendent_json_object) 16 | (nested_descendent_json_objects) 17 18singleton_descendent_json_object: 19 SELECT json_duality_object_expression 20 FROM child_table_name [AS table_alias] 21 WHERE json_duality_join_condition 22 23nested_descendent_json_objects: 24 SELECT JSON_ARRAYAGG(json_duality_object_expression [json_constructor_null_clause]) 25 FROM child_table_name [AS table_alias] 26 WHERE json_duality_join_condition 27 28json_constructor_null_clause: 29 NULL ON NULL | ABSENT ON NULL 30 31json_duality_join_condition: 32 [schema_name.]child_table_name.column_name 33 = [schema_name.]parent_table_name.column_name 34 35json_duality_object_expression: 36 JSON_DUALITY_OBJECT( 37 [table_annotations_expression] json_duality_key_value_pairs 38 )
_json_duality_key_value_pairs_는 key_name: value_expression 형식의 키-값 쌍 집합입니다. 루트 오브젝트에는 _id라는 키가 반드시 존재해야 하며, 이 키는 프로젝션되는 테이블의 기본 키 컬럼에 대응해야 합니다. _id라는 이름의 서브 키는 허용되지 않습니다.
_value_expression_은 다음 중 하나여야 합니다. 컬럼 이름, JSON_DUALITY_OBJECT()가 반환하는 오브젝트(단일 디센던트), JSON_ARRAYAGG()가 반환하는 오브젝트(중첩 디센던트)입니다.
_column_name_은 프로젝션되는 테이블( root_table_name 또는 current_table_name)의 유효한 컬럼을 참조해야 합니다. 동일한 _column_name_은 하나의 JSON_DUALITY_OBJECT() 호출 내에서 한 번만 사용할 수 있습니다. _column_name_에는 함수나 연산자를 사용할 수 없습니다. JSON, VECTOR, GEOMETRY ( POINT, LINESTRING, POLYGON 등 모든 파생 타입 포함) 타입의 컬럼 및 생성 컬럼은 지원되지 않습니다. _json_duality_key_value_pairs_에서 루트 테이블의 _id 키에 해당하는 컬럼은 해당 테이블의 기본 키여야 합니다.
_singleton_descendent_json_object_는 FROM 절을 가진 SELECT statement로 구성됩니다. SELECT 목록과 FROM 절은 CREATE JSON DUALITY VIEW statement의 top-level 쿼리에 대해 설명된 규칙과 동일한 규칙을 따릅니다.
_nested_descendent_json_objects_는 JSON_ARRAYAGG()를 사용하여 하나의 식( json_duality_object_expression)을 선택하며, 이 식은 비어 있지 않은 JSON_DUALITY_OBJECT()를 포함해야 합니다. select 목록과 FROM 절은 _singleton_descendent_json_object_에 대해 설명된 것과 동일한 규칙을 따릅니다. 선택적인 _json_constructor_null_clause_는 _json_duality_object_expression_이 null로 평가될 때 이 함수의 동작을 지정합니다. 이 값은 ABSENT ON NULL 또는 NULL ON NULL(기본값) 중 하나입니다. NULL ON NULL은 JSON null 값을 반환하고, ABSENT ON NULL은 출력 JSON 배열에서 해당 값을 생략합니다.
_singleton_descendent_json_object_와 _nested_descendent_json_objects_는 모두 WHERE 절을 지원합니다. 이 절은 다음과 같은 형식을 가진 하나의 식만을 포함해야 합니다:
1[schema_name.]child_table_name.column_name 2 = [schema_name.]parent_table_name.column_name
이 WHERE 절에서는 equality 외의 어떠한 유형의 조건도 지원되지 않습니다. AND 또는 OR 연산자를 사용한 다중 조건 역시 지원되지 않습니다.
JSON_DUALITY_OBJECT()는 선택적인 _table_annotations_expression_을 받습니다. 이 식은 쉼표로 구분된 목록으로, 애너테이션 값 INSERT, UPDATE, DELETE를 어떤 순서로든 모두 포함해야 합니다. 어떤 애너테이션 값도 두 번 이상 나올 수 없습니다. 이 함수는 _table_의 컬럼과 _json_duality_key_value_pairs_로 정의된 JSON 컬렉션 사이의 매핑을 반환합니다. 각 키에 사용되는 값은 다음 세 가지 유형 중 하나일 수 있습니다:
_table_의 컬럼 이름. 이는 컬럼 이름만이어야 하며, 식일 수 없습니다.
FROM 절이 있는 SELECT로 구성된 singleton_descendent_json_object. SELECT 목록과 FROM 절은 CREATE JSON DUALITY VIEW의 top-level 쿼리에 대해 설명된 규칙을 따릅니다.
nested_descendent_json_objects 집합으로, JSON_ARRAYAGG()를 사용하여 식을 선택하며, 이 식은 다시 JSON_DUALITY_OBJECT()를 포함합니다.
테이블이 여러 번 프로젝션되는 경우, 해당 테이블 프로젝션의 모든 인스턴스에서 프로젝션되는 컬럼 집합은 일관적이어야 합니다.
자세한 정보와 예제는 Section 27.7, “JSON Duality Views”를 참조하십시오.
15.1.16 CREATE FUNCTION Statement
15.1.18 CREATE INDEX Statement