trabalhando com views no mysql

Upload: eme3mil

Post on 29-May-2018

224 views

Category:

Documents


0 download

TRANSCRIPT

  • 8/9/2019 Trabalhando Com Views No MySQL

    1/5

    Trabalhando com views no MySQL

    Neste artigo sero apresentados os principais conceitos de armazenamento de procedimentos no servidor de

    bancos de dados MySQL, alm de mostrar como trabalhar essencialmente com objetos chamados Views. Alm

    dos conceitos que sero vistos, aprenderemos tambm, como montar nossas prprias vises dos dados de

    tabelas em um banco de dados.

    Para os exemplos que criaremos durante o artigo, utilizaremos o banco de dados World, disponvel em

    mysql.com.

    World Database disponvel

    em mysql.com

    Introduo

    Para quem trabalha com desenvolvimento de sistemas e administrao de dados diretos em bases de dados

    concentradas em um SGBD como o MySQL, Oracle ou SQL Server, sabe o quanto chateante ter que escrever

    e reescrever determinadas consultas todos os dias ou mesmo mais de uma vez no mesmo dia. Muitas destas

    consultas so derivadas de vrias tabelas o que nos d um re-trabalho ao montar todas aquelas JOINs, utilizar

    esse ou aquele ndice setado para esta ou aquela tabela para que tambm a performance de tal consulta tenha

    um tempo razoavelmente atraente.

    Sabemos tambm que a cada momento em que reescrevemos uma mesma consulta, conseguir os mesmos

    resultados de antes uma tarefa sria, j que existem vrias formas para se escrever uma mesma consulta,

    levando em conta a ordem em que as tabelas aparecem, a ordem dos campos e tudo mais. Tudo isso implica em

    ganho ou perda de performance. Estamos falando tanto em performance que parece que nosso artigo tomou

    outros rumos, mas no. De fato, quando temos um grande trabalho de ajuste de performance em uma consulta,

    podemos rapidamente transformar esta em uma View, que a partir disso, permanecer armazenada no servidor

    de bancos de dados em forma de tabela, para que possamos consult-la todas as vezes que precisarmos, sem ter

    que reescrever a mesma, aproveitando todo o trabalho de refino de performance supracitado.

    Mas, o que uma View?

    Uma View um objeto que pertence a um banco de dados, definida baseada em declaraesSELECTs,retornando uma determinada visualizao de dados de uma ou mais tabelas. Esses objetos so chamados porvezes de "virtual tables", formada a partir de outras tabelas que por sua vez so chamadas de "based tables" ou

    ainda outras Views. E alguns casos, as Views so atualizveis e podem ser alvos de declarao INSERT, UPDATE

    e DELETE, que na verdade modificam sua "based tables".

    Os benefcios da utilizao de Views, alm dos j salientados, so:

    y Uma View pode ser utilizada, por exemplo, para retornar um valor baseado em um identificador deregistro;

  • 8/9/2019 Trabalhando Com Views No MySQL

    2/5

    y Pode ser utilizada para promover restries em dados para aumentar a segurana dos mesmos e definirpolticas de acesso em nvel de tabela e coluna. Podem ser configurados para mostrar colunas diferentes

    para diferentes usurios do banco de dados;

    y Pode ser utilizada com um conjunto de tabelas que podem ser unidas a outros conjuntos de tabelas coma utilizao de JOINs ou UNION.

    Criando Views

    Para definir Views em um banco de dados, utilize a declarao CREATE VIEW , a qual tem a seguinte sintaxe:

    CREATE [OR REPLACE] [ALGORITHM = algorithm_type] VIEWVIEW view_name [(column_list)]

    AS select_statement[WITH [CASCADED | LOCAL] CHECK OPTION]

    view_name: o nome que damos ao objeto View que criarmos. Esse nome poder ser no qualificado, quando

    criado no banco de dados corrente ou totalmente qualificado quando criarmos em um banco de dados que noest definido no contexto atual (db_name.view_name).

    column_list: recurso para que possamos sobrescrever os nomes das colunas que sero recuperadas pela

    declarao SELECT;

    select_statement: a sua declaraoSELECT e indica a forma na qual voc deseja que os dados sejamretornados. Tal declarao dever indicar a forma a qual voc deseja retornar os dados, podendo ser utilizado

    funes, JOINs e UNION. Podem ser utilizadas quaisquer tabelas ou views contidas no servidor de bancos dedados MySQL, observando a questo de nomes totalmente qualificados ou no.

    OR REPLACE: pode ser utilizada para substituir uma View de mesmo nome existente no banco de dados ao

    qual ela pertence. Pode-se utilizarALTER TABLE para o mesmo efeito;

    ALGORITHM: essa clusula define qual algoritmo interno utilizar para processar a View quando a mesma for

    invocada. Estes podem ser UNDEFINED (clusula em branco), MERGE ou TEMPTABLE.

    WITH CHECK OPTION: todas as declaraes que tentarem modificar dados de uma view definida com essaclusula sero revisadas para checar se as modificaes respeitaro a condio WHERE, definida no SELECT daView.

    Ao criar uma View, um arquivo com extenso ".frm", com o mesmo nome desta tambm criado no diretrio

    do banco de dados, sob o diretrio de dados do MySQL (datadir).

    Definindo Views

    Para iniciarmos com a mo na massa, definiremos uma View simples para listar cidades da tabela City, do

    banco de dados World, como segue na figura 01.

    Figura 01 - Criando uma

    view simples e executando a mesma com um SELECT.

  • 8/9/2019 Trabalhando Com Views No MySQL

    3/5

    Podemos explicar que, a partir desse momento, se dermos um SHOW TABLES no banco de dados World, veremosque uma tabela adicional foi criada, que a View que criamos. Para uma conceituao mais ampla, uma View

    um mapeamento lgico de vrias tabelas contidas em um ou mais bancos de dados que por sua vez esto em umservidor MySQL. No caso da View criada naFigura 01, temos uma tabela virtual (vw_viewCity) baseada em

    uma tabela chamada de base (City). Um bom exemplo para utilizarmos a tal lista de colunas criar a mesmaView, mas agora sobrescrevendo o nome da coluna "Name" para "Cidade", como segue na Figura 02.

    Figura 02 - Erro!!! O que

    houve???

    Nossa inteno foi boa, mas faltou um pouco mais de anlise. Teremos que sobrescrever tambm a View, pois

    j existe uma outra com o mesmo nome. Portanto, usaremos oOR REPLACE para facilitar nossa vida, Figura 03.

    Figura 03 - Criando uma

    View sobrescrevendo o nome da coluna e uma View com o mesmo nome.

    Podemos criar Views mais sofisticadas, com um comando SELECT mais trabalhado, podendo utilizar das

    clusulas WHERE, GROUP BY, HAVING e ORDER BY. Alguns SGBDs comerciais no permitem a utilizao de

    ORDER BY em meio ao SELECT na definio de uma View, a exemplo do SQL Server, da Microsoft. A Figura

    04 mostra uma consulta mais trabalhada para a criao de uma View, envolvendo as tabelas Country e

    CountryLanguage do banco de dados World.

    Figura 04 - Criando umaView mais trabalhada.

    Atualizando Views

    Views podem ser constitudas facilmente, como vimos anteriormente. Mas para termos Views que podem

    receber declaraes de atualizao tais como UPDATE e DELETE, que de fato alteram as tabelas base ("basedtables"), temos que ter alguns cuidados na criao do objeto de visualizao. Uma View criada com funes

    agregadas, por exemplo, no poder receber atualizaes, pois os dados logicamente esto agregados ouagrupados e no teremos correspondncias diretas para uma excluso ou atualizao.

  • 8/9/2019 Trabalhando Com Views No MySQL

    4/5

    Anlise a seguinte situao: "crie uma View no banco de dados World para contar quantas lnguas se falam em

    cada pas que aparece nas tabelas Country e CountryLanguage ". Sendo esta a tarefa, teremos 1 registro apenas

    para cada pas da tabela Country, contando quantas lnguas aparecem na tabela para este nico pas na tabela

    CountryLanguage. Isso no nos possibilita atualizar uma determinada linha, pois, o que retornou dessa consulta

    foi um conjunto agrupado por pas.

    Quando temos uma View com um SELECT simples, sem agrupamento, podemos atualiz-la, esta que naverdade, somente receber a declarao e quem sero atualizadas sero as tabelas base que tem seus dados

    mapeados para esta View. Para que voc no estrague seu banco de dados World, criaremos uma tabela

    chamada "CountryPop", com seguinte sintaxe mostrada na Figura 05.

    Figura 05 - Criamos a tabelana qual utilizaremos como based table para uma View atualizvel.

    Com a tabela base criada, vamos ento definir a View para que possamos atualizar a mesma. A Figura 06

    mostra a View sendo definida, faremos um SELECT na View para exibir a linha que atualizaremos e na

    seqncia emitimos um UPDATE para que a mesma seja atualizada.

    Figura 06 - Atualizando uma

    View.

    Views com WITH CHECK OPTION

    Podemos ainda trabalhar algumas restries na criao de algumas Views, como utilizar a opo WITH CHECK

    OPTION. Atribuindo esta opo na criao de uma View significa que atualizao que so emitidas tero que se

    encaixar s condies definidas na clusula WHERE da consulta SELECT. Peguemos um exemplo de uma View

    que nos retorne todos os pases da tabela CountryPop que acabamos de criar, que tenha populaes maior ou

    igual a 100000000 (Figura 07).

  • 8/9/2019 Trabalhando Com Views No MySQL

    5/5