AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • Início
  • system&network
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • Início
  • system&network
    • Recentes
    • Highest score
    • tags
  • Ubuntu
    • Recentes
    • Highest score
    • tags
  • Unix
    • Recentes
    • tags
  • DBA
    • Recentes
    • tags
  • Computer
    • Recentes
    • tags
  • Coding
    • Recentes
    • tags
Início / dba / Perguntas / 9659
Accepted
gbn
gbn
Asked: 2011-12-24 02:09:53 +0800 CST2011-12-24 02:09:53 +0800 CST 2011-12-24 02:09:53 +0800 CST

Exibir atualização de metadados no MySQL

  • 772

Como outros RDBMS, os metadados de visualização são armazenados no momento da criação da visualização.

De CREATE VIEWnos documentos do MySQL

A definição da visualização é “congelada” no momento da criação, portanto, as alterações posteriores nas tabelas subjacentes [sic] não afetam a definição da visualização.

Não consigo ver uma maneira de atualizar esses metadados de exibição de forma limpa, ao contrário de outros RDBMS:

  • Servidor SQL:EXEC sp_refreshview 'MyView'
  • Oráculo:ALTER VIEW MyView COMPILE

O sistema aqui parece ser "faça isso manualmente" com DROP/CREATE, que não é meu estilo. A multidão habitual que faz esse processo manual está de licença, então cabe a mim esta semana.

Também não tenho um lacaio para indicar: então, qualquer solução, por favor...

mysql view
  • 1 1 respostas
  • 2169 Views

1 respostas

  • Voted
  1. Best Answer
    RolandoMySQLDBA
    2011-12-24T08:52:39+08:002011-12-24T08:52:39+08:00

    Para ver a definição da exibição, execute um dos seguintes procedimentos:

    • SHOW CREATE VIEW viewname\G
    • SELECT * from information_schema.views where table_name='viewname'\G

    Aqui está um exemplo rápido:

    mysql> show create table mytable\G
    *************************** 1. row ***************************
           Table: mytable
    Create Table: CREATE TABLE `mytable` (
      `id` smallint(5) unsigned NOT NULL AUTO_INCREMENT,
      `age` tinyint(4) NOT NULL,
      PRIMARY KEY (`id`)
    ) ENGINE=InnoDB AUTO_INCREMENT=5 DEFAULT CHARSET=latin1
    1 row in set (0.00 sec)
    
    mysql> select * from mytable;
    +----+-----+
    | id | age |
    +----+-----+
    |  1 |  10 |
    |  2 |  15 |
    |  3 |  20 |
    |  4 |   5 |
    +----+-----+
    4 rows in set (0.00 sec)
    
    mysql> create view mytable_tens as select * from mytable where MOD(age,10) = 0;
    Query OK, 0 rows affected (0.04 sec)
    
    mysql> select * from mytable_tens;
    +----+-----+
    | id | age |
    +----+-----+
    |  1 |  10 |
    |  3 |  20 |
    +----+-----+
    2 rows in set (0.00 sec)
    
    mysql> show create view mytable_tens\G
    *************************** 1. row ***************************
                    View: mytable_tens
             Create View: CREATE ALGORITHM=UNDEFINED DEFINER=``@`` SQL SECURITY DEFINER VIEW `mytable_tens` AS select `mytable`.`id` AS `id`,`mytable`.`age` AS `age` from `mytable` where ((`mytable`.`age` % 10) = 0)
    character_set_client: latin1
    collation_connection: latin1_swedish_ci
    1 row in set (0.00 sec)
    
    mysql> select * from information_schema.views where table_name='mytable_tens'\G
    *************************** 1. row ***************************
           TABLE_CATALOG: def
            TABLE_SCHEMA: johnlocke
              TABLE_NAME: mytable_tens
         VIEW_DEFINITION: select `johnlocke`.`mytable`.`id` AS `id`,`johnlocke`.`mytable`.`age` AS `age` from `johnlocke`.`mytable` where ((`johnlocke`.`mytable`.`age` % 10) = 0)
            CHECK_OPTION: NONE
            IS_UPDATABLE: YES
                 DEFINER: @
           SECURITY_TYPE: DEFINER
    CHARACTER_SET_CLIENT: latin1
    COLLATION_CONNECTION: latin1_swedish_ci
    1 row in set (0.02 sec)
    

    Seja qual for o método escolhido, você pode ver visivelmente a consulta que compõe a exibição. Você pode esculpir CREATE OR REPLACE VIEW usando o que for mostrado.

    Espero ter ajudado, e bem-vindo ao DBA MinionExchange!!!

    • 1

relate perguntas

  • Existem ferramentas de benchmarking do MySQL? [fechado]

  • Onde posso encontrar o log lento do mysql?

  • Como posso otimizar um mysqldump de um banco de dados grande?

  • Quando é o momento certo para usar o MariaDB em vez do MySQL e por quê?

  • Como um grupo pode rastrear alterações no esquema do banco de dados?

Sidebar

Stats

  • Perguntas 205573
  • respostas 270741
  • best respostas 135370
  • utilizador 68524
  • Highest score
  • respostas
  • Marko Smith

    Como você mysqldump tabela (s) específica (s)?

    • 4 respostas
  • Marko Smith

    Como você mostra o SQL em execução em um banco de dados Oracle?

    • 2 respostas
  • Marko Smith

    Como selecionar a primeira linha de cada grupo?

    • 6 respostas
  • Marko Smith

    Listar os privilégios do banco de dados usando o psql

    • 10 respostas
  • Marko Smith

    Posso ver Consultas Históricas executadas em um banco de dados SQL Server?

    • 6 respostas
  • Marko Smith

    Como uso currval() no PostgreSQL para obter o último id inserido?

    • 10 respostas
  • Marko Smith

    Como executar o psql no Mac OS X?

    • 11 respostas
  • Marko Smith

    Como inserir valores em uma tabela de uma consulta de seleção no PostgreSQL?

    • 4 respostas
  • Marko Smith

    Como faço para listar todos os bancos de dados e tabelas usando o psql?

    • 7 respostas
  • Marko Smith

    Passando parâmetros de array para um procedimento armazenado

    • 12 respostas
  • Martin Hope
    Manuel Leduc Restrição exclusiva de várias colunas do PostgreSQL e valores NULL 2011-12-28 01:10:21 +0800 CST
  • Martin Hope
    markdorison Como você mysqldump tabela (s) específica (s)? 2011-12-17 12:39:37 +0800 CST
  • Martin Hope
    Stuart Blackler Quando uma chave primária deve ser declarada sem cluster? 2011-11-11 13:31:59 +0800 CST
  • Martin Hope
    pedrosanta Listar os privilégios do banco de dados usando o psql 2011-08-04 11:01:21 +0800 CST
  • Martin Hope
    Jonas Como posso cronometrar consultas SQL usando psql? 2011-06-04 02:22:54 +0800 CST
  • Martin Hope
    Jonas Como inserir valores em uma tabela de uma consulta de seleção no PostgreSQL? 2011-05-28 00:33:05 +0800 CST
  • Martin Hope
    Jonas Como faço para listar todos os bancos de dados e tabelas usando o psql? 2011-02-18 00:45:49 +0800 CST
  • Martin Hope
    BrunoLM Guid vs INT - Qual é melhor como chave primária? 2011-01-05 23:46:34 +0800 CST
  • Martin Hope
    bernd_k Quando devo usar uma restrição exclusiva em vez de um índice exclusivo? 2011-01-05 02:32:27 +0800 CST
  • Martin Hope
    Patrick Como posso otimizar um mysqldump de um banco de dados grande? 2011-01-04 13:13:48 +0800 CST

Hot tag

sql-server mysql postgresql sql-server-2014 sql-server-2016 oracle sql-server-2008 database-design query-performance sql-server-2017

Explore

  • Início
  • Perguntas
    • Recentes
    • Highest score
  • tag
  • help

Footer

AskOverflow.Dev

About Us

  • About Us
  • Contact Us

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve