Download - Trabalhando Com Views No MySQL
-
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