source

mysql에서 보기에 대한 주석 만들기

lovecheck 2023. 9. 19. 21:15
반응형

mysql에서 보기에 대한 주석 만들기

보기에는 일반 테이블과 마찬가지로 주석 필드가 있지만 기본적으로 "VIEW" 값으로 채워집니다.

[TABLE_CATALOG] => 
[TABLE_SCHEMA] => xxx
[TABLE_NAME] => view__xxxx
[TABLE_TYPE] => VIEW
[ENGINE] => 
[VERSION] => 
[ROW_FORMAT] => 
[TABLE_ROWS] => 
[AVG_ROW_LENGTH] => 
[DATA_LENGTH] => 
[MAX_DATA_LENGTH] => 
[INDEX_LENGTH] => 
[DATA_FREE] => 
[AUTO_INCREMENT] => 
[CREATE_TIME] => 
[UPDATE_TIME] => 
[CHECK_TIME] => 
[TABLE_COLLATION] => 
[CHECKSUM] => 
[CREATE_OPTIONS] => 
[TABLE_COMMENT] => VIEW

댓글로 보기를 작성하려고 하면 오류가 발생합니다.

CREATE OR REPLACE VIEW view__x AS
SELECT 
 * 
FROM `some_table`  
COMMENT = 'some comment'

댓글 필드를 수정할 방법이 있나요, 아니면 해당 필드가 내부적으로 다른 것에 사용되고 그대로 유지되어야 하나요?

mysql에 기능 요청을 추가했습니다.

create view 구문에 따르면 comment view를 추가할 방법은 현재 없습니다.

이 기능은 여러 번 요청되었습니다.이 기능과 관련된 활성 티켓은 네 가지입니다.

...그리고 몇몇은 중복으로 표시되었습니다: http://bugs.mysql.com/bug.php?id=19602 , http://bugs.mysql.com/bug.php?id=19602 , http://bugs.mysql.com/bug.php?id=13109 , http://bugs.mysql.com/bug.php?id=14369 , http://bugs.mysql.com/bug.php?id=11082 , http://bugs.mysql.com/bug.php?id=42870 , http://bugs.mysql.com/bug.php?id=38137 , http://bugs.mysql.com/bug.php?id=38137 , http://bugs.mysql.com/bug.php?id=30729

이 문제에 관심이 있으시면 4개의 활성 티켓으로 이동하여 "영향을 드립니다" 단추를 클릭한 다음 이 기능을 작업하는 사람이 있는지 묻는 댓글을 추가하십시오.

이를 통해 가시성을 높이고, 구현 가능성을 높일 수 있습니다.

업데이트 - 2013년 12월에 올린 글입니다.그 당시 버전은 5.7이었습니다.2023년 8월 현재 최신 버전은 8.1이며 CREATE VIEW 문서 페이지는 변경되지 않았습니다.

저도 비슷한 필요가 있었는데, MySQL에서 이것을 해킹한 한 가지 방법은 진실한 술어를 추가하는 것이었습니다.WHERE문서의 역할을 했던 조항입니다.이것이 진부하다는 것은 인정하지만, 어떤 문서라도 문서가 없는 것보다는 낫다는 것에 동의하지 않겠습니까?일단 이런 식으로 당신의 논평을 하는 것의 좋은 부작용은 살아남을 것입니다.mysqldump. 내가 아는 한, 옵티마이저는 추가적인 진리 술어에 방해받지 않을 것입니다.

보기 작성 예제:

CREATE OR REPLACE VIEW high_value_employees AS
SELECT *
FROM `employees`
WHERE salary >= 200000
AND 'comment' != 'This view was made by Josh at the request of an important VP who wanted a concise list of who we might be overpaying. Last modified on 26 July 2019.';

그런 다음 설명서를 보고...

> SHOW CREATE TABLE high_value_employees \G
*************************** 1. row ***************************
                View: high_value_employees
         Create View: CREATE ALGORITHM=UNDEFINED DEFINER=`jhuber`@`%` SQL SECURITY 
DEFINER VIEW `high_value_employees` AS select `employees`.`salary` AS `salary` from
`employees` where ((`employees`.`salary` >= 200000) and ('comment' <> 'This view was
made by Josh at the request of an important VP who wanted a concise list of who we
might be overpaying. Last modified on 26 July 2019.'))
character_set_client: utf8mb4
collation_connection: utf8mb4_general_ci
1 row in set (0.00 sec)

스키마에 테이블을 만들어 각 뷰에 대한 설명을 저장하면 뷰에 대한 설명을 홈브루할 수 있습니다.그런 다음 information_schema.tables를 새 테이블에 조인합니다.

-- A view does not show the table-level comments of the underlying table.
-- nor can a view have view-level comments

CREATE TABLE `zztable` (
-- A SQL statement comment. Not stored with the table. Just documents the create table code
  `zz_id` int(10) unsigned NOT NULL AUTO_INCREMENT COMMENT 'unique primary key. auto increment',
  `zz_descr` varchar(255) NOT NULL COMMENT 'descriptive name. must be unique if not null',
  PRIMARY KEY (`zz_id`),
  UNIQUE KEY `zz_descr_UNIQUE` (`zz_descr`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='a table demonstrating table, column, and view comments. ';

-- select the table from information_schema
SELECT table_type, table_name, table_rows, table_comment
FROM information_schema.tables ta
WHERE ta.table_name LIKE 'zztable%'
ORDER BY ta.table_type, ta.table_name;

-- create a view over the commented table
CREATE OR REPLACE VIEW zztable_vw
AS
SELECT zz_id, zz_descr
FROM zztable;

-- now run the information_schema queries again to see the new view in the results
-- MySQL does not allow view-level comments. 

-- create a new table to contain the view-level comments
CREATE TABLE IF NOT EXISTS `schema_view` (
  `schema_view_id` INT UNSIGNED NOT NULL AUTO_INCREMENT COMMENT 'unique primary key. auto increment. ',
  `schema_view_name` VARCHAR(64) NOT NULL COMMENT 'view name matches information_schema.tables.table_name for VIEW',
  `schema_view_comment` VARCHAR(2048) NULL DEFAULT NULL COMMENT 'the descriptive purpose of the view. ',
  PRIMARY KEY (`schema_view_id`))
ENGINE = InnoDB
COMMENT = 'contains comments for views since MySQL does not store view-level comments. Use this in a join on schema_view_name to information_schema.tables.table_name';

CREATE UNIQUE INDEX `schema_view_name_UNIQUE` ON `schema_view` (`schema_view_name` ASC);

-- insert a view comment
SELECT * FROM schema_view;

INSERT INTO schema_view
(schema_view_name, schema_view_comment)
VALUES ('zztable_vw' , 'a demonstration of documenting view metadata with comments');
COMMIT;

-- modify the query to join to the new schema_view table
-- select the view from information_schema joined to the new table
SELECT ta.table_type, ta.table_name, ta.table_rows, 
    -- show different comments based on table_type
    CASE 
        WHEN ta.table_type = 'BASE TABLE' THEN ta.table_comment
        WHEN ta.table_type = 'VIEW' THEN sv.schema_view_comment
        ELSE NULL
    END AS schema_comment,
    ta.table_comment, 
    sv.schema_view_comment
FROM information_schema.tables ta
-- Show view comments if it exists.
LEFT OUTER JOIN schema_view sv
  ON ta.table_name = sv.schema_view_name
WHERE ta.table_name LIKE 'zztable%'
ORDER BY ta.table_type, ta.table_name;

-- simplify future queries by creating a view
CREATE OR REPLACE VIEW `schema_table_vw`
AS
SELECT ta.table_type, ta.table_name, ta.table_rows, 
    -- show different comments based on type
    CASE 
        WHEN ta.table_type = 'BASE TABLE' THEN ta.table_comment
        WHEN ta.table_type = 'VIEW' THEN sv.schema_view_comment
        ELSE NULL
    END AS schema_comment
FROM information_schema.tables ta
-- Show view comments if it exists.
LEFT OUTER JOIN schema_view sv
  ON ta.table_name = sv.schema_view_name
WHERE ta.table_schema = 'my_schema'
ORDER BY ta.table_type, ta.table_name;

-- 이제 보기 수준 및 테이블 수준 주석이 schema_comment에 표시됩니다.

<table width="200" border="1">
  <tr>
    <th scope="col">table_type</th>
    <th scope="col">table_name</th>
    <th scope="col">table_rows</th>
    <th scope="col">schema_comment</th>
    <th scope="col">table_comment</th>
    <th scope="col">schema_view_comment</th>
  </tr>
  <tr>
    <td>BASE TABLE</td>
    <td>zztable</td>
    <td>0</td>
    <td>a table demonstrating table, column, and view comments.</td>
    <td>a table demonstrating table, column, and view comments.</td>
    <td>NULL</td>
  </tr>
  <tr>
    <td>VIEW</td>
    <td>zztable_vw</td>
    <td>NULL</td>
    <td>a demonstration of documenting view metadata with comments</td>
    <td>VIEW</td>
    <td>a demonstration of documenting view metadata with comments</td>
  </tr>
</table>

개발 중인 뷰의 버전을 표시하여 다른 환경의 다양한 버전을 추적할 수 있기를 바랍니다.제 솔루션은 간단합니다.그냥 필드 목록에 버전이 포함된 상수 필드를 추가합니다.검색된 모든 뷰 레코드에 뷰 버전이 함께 제공되는 이점을 누리고 있습니다.

VIEW `myview` AS
    SELECT 
        '2022-10-11' AS `ViewVersion`,
....

언급URL : https://stackoverflow.com/questions/8891858/create-comments-for-views-in-mysql

반응형